자료구조
데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계 → 자료를 효율적으로 사용할 수 있도록 컴퓨터에 저장하는 방법
배열(array)
같은 자료형의 변수인 구성 요소(component)가 모인 것
int[] a; // 구성 요소의 자료형이 int형인 배열
위의 배열 선언에서 만들어지는 a는 배열 변수(array variavle)라고 부르는 특수한 변수일뿐 배열 그 자체는 아님
배열 본체는 연산자 new를 사용하여 생성함
아래와 같이 선언하면 생성한 배열 본체를 참조할 수 있음 → 왼쪽 피연산자인 배열 a에 참조하는 곳을 대입하여 배열 변수 a와 배열 본체를 연결
a = new int[5]; // new를 사용하여 배열 본체를 생성한 뒤 배열 변수 a와 연결
아래의 코드는 배열 본체 생성과 배열 변수 연결을 하나의 선언으로 수행
배열 본체를 생성하는 new 식을 배열 변수의 초기자(initializer)로 사용함
int[] a = new int[5];
인덱스 식과 구성요소
배열 본체 안의 구성 요소에 접근(access)하려면 정수형 인덱스를 연산자 [] 안에 넣은 인덱스 식을 사용함
첫 번째 배열 요소의 인덱스는 0으로, 처음부터 순서대로 a[0], a[1], … a[4] → 표현식 a[i]는 배열 a에서 처음부터 i개 뒤의 구성 요소에 접근함
구성 요소가 n개인 배열의 구성 요소는 a[n-1]까지
배열 변수 이름[인덱스] // 배열 안의 특정 구성 요소에 접근
구성 요솟수(길이)
배열의 구성 요솟수는 배열의 길이(length)라고도 함
배열 변수 이름.length // 배열의 구성 요솟수
구성 요소의 자료형이 int형인 배열
package ch02_1;
// 구성 요소의 자료형이 int형인 배열(구성 요솟수는 5 - new에 의해 본체를 생성)
public class Ex01_intArray {
public static void main(String[] args) {
int[] a = new int[5]; // 배열의 선언
a[1] = 37; // a[1]에 37을 대입
a[2] = 51; // a[2]에 51을 대입
a[4] = a[1] * 2; // a[4]에 a[1] * 2, 곧 74를 대입
for (int i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
/*
a[0] = 0
a[1] = 37
a[2] = 51
a[3] = 0
a[4] = 74
*/
int[] a; // 선언하기
a = new int[5]; // 참조하기
각 자료형의 기본값
위의 코드에서 값을 대입하지 않은 a[0]과 a[3]의 값이 0 → 배열의 구성 요소는 자동으로 0으로 초기화되는 규칙이 있음
배열을 생성할 때 각 구성 요소에 넣는 초깃값을 기본값(default value)이라고 함
모든 자료형에서 기본값은 0 또는 0에 가까운 값
자료형 | 기본값 |
byte | zero, 곧 (byte)0 |
short | zero, 곧 (short)0 |
int | zero, 곧 0 |
long | zero, 곧 0L |
float | zero, 곧 0.0f |
double | zero, 곧 0.0d |
char | 널(null) 문자, 곧 ‘\u0000’ |
boolean | 거짓, 곧 false |
참조형 | 널(null) 참조, 곧 null |
배열의 요솟값을 초기화하며 배열 선언하기
배열 본체는 new 연산자뿐만 아니라 배열 초기화(array initializer)에서도 생성할 수 있음
배열 초기화를 사용하면 배열 본체의 생성과 동시에 각 구성 요소를 특정값으로 초기화할 수 있음
package ch02_1;
// 구성 요소의 자료형이 int형인 배열(구성 요솟수는 5 - 배열 초기화에 의해 생성)
public class Ex02_intArrayInit {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5}; // 배열 초기화에 의해 생성
for (int i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
/*
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5
*/
배열 요소의 최댓값 구하기
아래의 if문을 요솟수가 3이면 2회, 4면 3회 실행하여 최댓값을 구함
int max = a[0];
if(a[1] > max) max = a[1];
if(a[2] > max) max = a[2];
int max = a[0];
// 요솟수가 n이면 if문을 n-1회 실행
for(int i=1; i<n; i++) {
if(a[i] > max) max = a[i];
}
프로그램 실행 중 배열의 요솟수 결정하기
package ch02_1;
import java.util.Scanner;
// 배열 요소의 최댓값 출력
public class Ex03_maxOfArray {
// 배열 a의 최댓값을 구하여 반환
static int maxOf(int[] a) {
int max = a[0];
for (int i = 1; i < a.length; i++) {
if (a[i] > max)
max = a[i];
}
return max;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("키의 최댓값을 구합니다.");
System.out.print("사람 수: ");
int num = scanner.nextInt(); // 배열의 요솟수를 입력받음
int[] height = new int[num]; // 요숫수가 num인 배열을 생성
for (int i = 0; i < num; i++) {
System.out.print("height[" + i + "]: ");
height[i] = scanner.nextInt();
}
System.out.println("최댓값은 " + maxOf(height) + "입니다.");
}
}
접근제한자 종류
public: 모든 접근 허용
protected: 같은 패키지의 객체, 상속 관계의 객체 허용
default: 같은 패키지의 객체 허용
private: 현재의 객체 안에서만 허용
접근 제한자 사용
클래스: public, default
생성자: public, protected, default, private
멤버 변수: public, protected, default, private
멤버 메서드: public, protected, default, private
지역 변수: 접근 제한자를 사용할 수 없음
난수를 사용하여 배열의 요솟값 설정하기
package ch02_1;
import java.util.Random;
import java.util.Scanner;
// 배열 요소의 최댓값을 출력(값을 난수로 생성)
public class Ex04_maxOfArrayRand {
// 배열 a의 최댓값을 구하여 반환
static int maxOf(int[] a) {
int max = a[0];
for (int i = 0; i < a.length; i++) {
if (a[i] > max) max = a[i];
}
return max;
}
public static void main(String[] args) {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
System.out.println("키의 최댓값을 구합니다.");
System.out.print("사람 수: ");
int num = scanner.nextInt(); // 배열의 요솟수 입력받기
int[] height = new int[num]; // 요솟수가 num인 배열 생성
System.out.println("킷값은 아래와 같습니다.");
for (int i = 0; i < num; i++) {
height[i] = 100 + random.nextInt(90); // 요솟값을 난수로 결정(0~89 사이의 수)
System.out.println("height[" + i + "]: " + height[i]);
}
System.out.println("최댓값은 " + maxOf(height) + "입니다");
}
}
사람 수, 키를 난수로 생성하기
package ch02_1;
import java.util.Random;
// 배열 요소의 최댓값을 출력(값을 난수로 생성)
public class Ex05_maxOfArrayRand {
// 배열 a의 최댓값을 구하여 반환
static int maxOf(int[] a) {
int max = a[0];
for (int i = 0; i < a.length; i++) {
if (a[i] > max) max = a[i];
}
return max;
}
public static void main(String[] args) {
Random random = new Random();
System.out.println("키의 최댓값을 구합니다.");
int num = random.nextInt(10) + 1;
System.out.println("사람 수: " + num);
int[] height = new int[num];
System.out.println("킷값은 아래와 같습니다.");
for (int i = 0; i < num; i++) {
height[i] = 100 + random.nextInt(90);
System.out.println("height[" + i + "]: " + height[i]);
}
System.out.println("최댓값은 " + maxOf(height) + "입니다");
}
}
난수의 생성
Random rand = new Random(); // seed를 임의로 생성(자동으로 결정함)
Random rand = new Random(n); // seed를 지정(주어진 seed 바탕 난수 생성)
난수를 생성하는 Random 클래스의 메서드
구하는 식(메서드 호출) | 자료형 | 생성한 값의 범위 |
nextBoolean() | boolean | true 또는 false |
nextInt() | int | -2147483648 ~ +2147483647 |
nextInt(n) | int | 0 ~ n-1 |
nextLong() | long | -9223372036854775808 ~ +9223372036854775808 |
nextDouble() | double | 0.0 이상 1.0 미만 |
nextFloat() | float | 0.0 이상 1.0 미만 |
요솟수가 n인 배열 요소를 역순으로 정렬하는 알고리즘
for(int i=0; i<n/2; i++)
// a[i]와 a[n-i-1]의 값을 교환
두 값의 교환 과정(x와 y의 값을 교환)
t=x; // x값을 t에 보관
x=y; // y값을 x에 대입
y=t; // t에 보관한 처음 x값을 y에 대입
배열 요소 역순 정렬 과정을 출력
package ch02_1;
import java.util.Arrays;
import java.util.Scanner;
// 배열 요소 역순 정렬 과정을 출력
public class Ex07_reverseArray {
static void reverse(int[] a) {
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length / 2; i++) {
int index = a.length - i - 1;
System.out.println("a[" + i + "]과 a[" + index + "]을 교환합니다.");
int temp1 = a[i];
a[i] = a[index];
a[index] = temp1;
System.out.println(Arrays.toString(a));
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("요솟수는 : ");
int num = scanner.nextInt(); // 요솟수
int[] x = new int[num]; // 요솟수가 num인 배열
for (int i = 0; i < num; i++) {
System.out.print("x[" + i + "] : ");
x[i] = scanner.nextInt();
}
reverse(x); // 배열 a의 요소를 역순으로 정렬
System.out.println("역순 정렬을 마쳤습니다.");
}
}
/*
요솟수는 : 7
x[0] : 2
x[1] : 5
x[2] : 1
x[3] : 3
x[4] : 9
x[5] : 6
x[6] : 7
[2, 5, 1, 3, 9, 6, 7]
a[0]과 a[6]을 교환합니다.
[7, 5, 1, 3, 9, 6, 2]
a[1]과 a[5]을 교환합니다.
[7, 6, 1, 3, 9, 5, 2]
a[2]과 a[4]을 교환합니다.
[7, 6, 9, 3, 1, 5, 2]
역순 정렬을 마쳤습니다.
*/
배열의 모든 요소의 합계를 구하여 반환
package ch02_1;
import java.util.Scanner;
// 배열의 모든 요소의 합계를 구하여 반환
public class Ex08_sumOf {
// 배열의 요솟값을 출력
static int sumOf(int[] a) {
int result = 0;
for (int i = 0; i < a.length; i++) {
result += a[i];
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("요솟수는 : ");
int num = scanner.nextInt(); // 요솟수
int[] a = new int[num]; // 요솟수가 num인 배열
for (int i = 0; i < num; i++) {
System.out.print("a[" + i + "]: ");
a[i] = scanner.nextInt();
}
System.out.println("모든 요소의 합계는 " + sumOf(a) + "입니다.");
}
}
/*
요솟수는 : 3
a[0]: 1
a[1]: 2
a[2]: 3
모든 요소의 합계는 6입니다.
*/
배열 b의 모든 요소를 배열 a에 복사하는 메서드
package ch02_1;
import java.util.Scanner;
// 배열b의 모든 요소를 배열a에 복사하는 메서드
public class Ex09_copy {
// 배열 b의 모든 요소를 배열 a에 복사
static void copy(int[] a, int[] b) {
int num = a.length <= b.length ? a.length : b.length;
for (int i = 0; i < num; i++) {
a[i] = b[i];
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("a의 요솟수는 : ");
int numA = scanner.nextInt(); // 요솟수
int[] a = new int[numA]; // 요솟수가 num인 배열
for (int i = 0; i < numA; i++) {
System.out.print("a[" + i + "]: ");
a[i] = scanner.nextInt();
}
System.out.print("b의 요솟수는 : ");
int numB = scanner.nextInt(); // 요솟수
int[] b = new int[numB]; // 요솟수가 num인 배열
for (int i = 0; i < numB; i++) {
System.out.print("b[" + i + "]: ");
b[i] = scanner.nextInt();
}
copy(a, b);
System.out.println("배열 b의 모든 요소를 배열 a에 copy 하였습니다.");
for (int i = 0; i < numA; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
/*
a의 요솟수는 : 2
a[0]: 1
a[1]: 2
b의 요솟수는 : 3
b[0]: 5
b[1]: 4
b[2]: 3
배열 b의 모든 요소를 배열 a에 copy 하였습니다.
a[0] = 5
a[1] = 4
*/
배열의 모든 요소를 역순으로 복사하는 메서드
package ch02_1;
import java.util.Scanner;
// 배열의 모든 요소를 역순으로 복사하는 메서드
public class Ex10_rCopy {
// 배열 b의 모든 요소를 배열 a에 역순으로 복사
static void rcopy(int[] a, int[] b) {
int length = a.length <= b.length ? a.length : b.length;
for (int i = 0; i < length; i++) {
a[i] = b[b.length - i - 1];
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("a의 요솟수는 : ");
int numA = scanner.nextInt(); // 요솟수
int[] a = new int[numA]; // 요솟수가 num인 배열
for (int i = 0; i < numA; i++) {
System.out.print("a[" + i + "]: ");
a[i] = scanner.nextInt();
}
System.out.print("b의 요솟수는 : ");
int numB = scanner.nextInt(); // 요솟수
int[] b = new int[numB]; // 요솟수가 num인 배열
for (int i = 0; i < numB; i++) {
System.out.print("b[" + i + "]: ");
b[i] = scanner.nextInt();
}
rcopy(a, b);
System.out.println("배열 b의 모든 요소를 배열 a에 역순으로 copy 하였습니다.");
for (int i = 0; i < numA; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
/*
a의 요솟수는 : 2
a[0]: 1
a[1]: 2
b의 요솟수는 : 4
b[0]: 1
b[1]: 2
b[2]: 3
b[3]: 4
배열 b의 모든 요소를 배열 a에 역순으로 copy 하였습니다.
a[0] = 4
a[1] = 3
*/
전위형 증가 연산자와 후위형 증가 연산자
전위형 증가 연산자 ++a: 식 전제를 평가하기 전에 피연산자의 값 증가
후위형 증가 연산자 a++: 식 전체를 평가한 후 피연산자의 값 증가
기수 변환하기
10진수를 n진수로 변환하려면, 정수를 n으로 나눈 나머지를 몫이 0이 될 때까지 반복하고 이러한 과정을 통해 구한 나머지를 거꾸로 나열하면 됨
10진수(decimal)
0 1 2 3 4 5 6 7 8 9
1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0
2진수(binary)
0 1
0b1011 = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 // 2진수 표시 0b
8진수(octal)
0 1 2 3 4 5 6 7
05307 = 5 * 8^3 + 3 * 8^2 + 0 * 8^1 + 6 * 8^0 // 8진수 표시 0
16진수(hexadecimal)
0 1 2 3 4 5 6 7 8 9 A B C D E F
0x12A0 = 1 * 16^3 + 2 * 16^2 + A * 16^1 + 0 * 16^0 // 16진수 표시 0x
입력받은 10진수를 2진수~36진수로 기수 변환 출력
package ch02_1;
import java.util.Scanner;
// 입력받은 10진수를 2진수~36진수로 기수 변환 출력
public class Ex11_cardConv {
// 정숫값 x를 r진수로 변환하여 배열 d에 아랫자리부터 넣어두고 자릿수 반환
static int cardConv(int x, int r, char[] d) {
int digits = 0; // 변환 후 자릿수
String dChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
do {
d[digits++] = dChar.charAt(x % r); // r로 나눈 나머지 저장
x /= r;
} while (x != 0);
// 배열 d를 역순으로 정렬
for (int i = 0; i < digits / 2; i++) {
char t = d[i];
d[i] = d[digits - i - 1];
d[digits - i - 1] = t;
}
return digits;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int no; // 변환하는 정수
int cd; // 기수
int dno; // 변환 후의 자릿수
int retry; // 재시도 변수
char[] cno = new char[32]; // 변환 후 각 자리 숫자 넣어두는 배열
System.out.println("10진수를 기수 변환합니다.");
do {
do {
System.out.print("변환하는 음이 아닌 정수: ");
no = scanner.nextInt();
} while (no < 0);
do {
System.out.print("변환하고자 하는 진수(2~36): ");
cd = scanner.nextInt();
} while (cd < 2 || cd > 36);
dno = cardConv(no, cd, cno); // no를 cd진수로 변환
System.out.print(cd + "진수로 ");
for (int i = 0; i < dno; i++) {
System.out.print(cno[i]);
}
System.out.println("입니다.");
System.out.print("한 번 더 할까요? (1. 예 / 0. 아니요): ");
retry = scanner.nextInt();
} while (retry == 1);
}
}
/*
10진수를 기수 변환합니다.
변환하는 음이 아닌 정수: 59
변환하고자 하는 진수(2~36): 2
2진수로 111011입니다.
한 번 더 할까요? (1. 예 / 0. 아니요): 0
*/
기수 변환 과정 출력 프로그램
package ch02_1;
import java.util.Scanner;
// 기수 변환 과정 출력 프로그램
public class Ex12_cardConv {
// 정숫값 no를 cd진수로 변환하여 배열 cno에 역순으로 저장하고 자릿수 반환
static int cardConv(int no, int cd, char[] cno) {
int n = ((Integer) no).toString().length(); // 변환 전 자릿수
int dno = 0; // 변환 후 자릿수
String dChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.printf(String.format("%%2d | %%%dd\\n", n), cd, no);
do {
System.out.printf(" +");
System.out.print("-".repeat(n + 2));
System.out.println();
if (no / cd != 0) {
System.out.printf(String.format("%%2d | %%%dd ... %%d\\n", n), cd, no / cd, no % cd);
} else {
System.out.printf(String.format(" %%%dd ... %%d\\n", n), no / cd, no % cd);
}
cno[dno++] = dChar.charAt(no % cd); // cd로 나눈 나머지를 저장
no /= cd;
} while (no != 0);
// 역순으로 정렬
for (int i = 0; i < dno / 2; i++) {
char temp = cno[i];
cno[i] = cno[dno - i - 1];
cno[dno - i - 1] = temp;
}
return dno;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int no; // 변환하는 정수
int cd; // 기수
int dno; // 변환 후의 자릿수
int retry; // 재시작
char[] cno = new char[32]; // 변환 후 각 자리 숫자 넣어두는 배열
do {
System.out.println("10진수를 기수 변환합니다.");
do {
System.out.print("변환하는 음이 아닌 정수: ");
no = scanner.nextInt();
} while (no < 0);
do {
System.out.print("변환하고자 하는 진수(2~36): ");
cd = scanner.nextInt();
} while (cd < 2 || cd > 36);
dno = cardConv(no, cd, cno); // no를 cd진수로 변환
System.out.print(cd + "진수로 ");
for (int i = 0; i < dno; i++) {
System.out.print(cno[i]);
}
System.out.println("입니다.");
System.out.print("한 번 더 할까요? (1. 예 / 0. 아니요): ");
retry = scanner.nextInt();
} while (retry == 1);
}
}
/*
10진수를 기수 변환합니다.
변환하는 음이 아닌 정수: 59
변환하고자 하는 진수(2~36): 2
2 | 59
+----
2 | 29 ... 1
+----
2 | 14 ... 1
+----
2 | 7 ... 0
+----
2 | 3 ... 1
+----
2 | 1 ... 1
+----
0 ... 1
2진수로 111011입니다.
한 번 더 할까요? (1. 예 / 0. 아니요): 0
*/
1000 이하의 소수 나열(버전1)
package ch02_1;
// 1000 이하의 소수 나열(버전1)
public class Ex13_primeNumber1 {
public static void main(String[] args) {
int counter = 0; // 나눗셈의 횟수
for (int n = 2; n <= 1000; n++) {
int i;
for(i=2; i<n; i++) {
counter++;
// 나누어 떨어지면 소수가 아니기에 반복 탈출
if(n%i == 0) break;
}
if(n == i) {
System.out.println(n);
}
}
System.out.println("나눗셈을 수행한 횟수: " + counter);
}
}
/*
나눗셈을 수행한 횟수: 78022
*/
소수 판단
n이 2 또는 3으로 나누어 떨어지지 않으면 23인 4 혹은 23인 6으로도 나누어 떨어지지 않음
즉, 2부터 n-1까지의 어떤 소수로도 나누어 떨어지지 않는다.
만약 어떤 정수 n이 n의 제곱근 이하의 어떤 소수로도 나누어 떨어지지 않으면 소수이다.
1000 이하의 소수 나열(버전2)
package ch02_1;
// 1000 이하의 소수 나열(버전2)
public class Ex14_primeNumber2 {
public static void main(String[] args) {
int count = 0; // 나눗셈 횟수
int ptr = 0; // 찾은 소수의 개수
int[] prime = new int[500]; // 소수를 저장하는 배열
prime[ptr++] = 2; // 소수 2 넣고 index값 증가시킴
// 소수를 찾는 것이기에 홀수만 조사
for (int n = 3; n <= 1000; n+=2) {
int i;
for (i = 1; i < ptr; i++) {
count++;
// 이미 찾은 소수로 나눠보기
if(n % prime[i] == 0) {
break; // 나누어 떨어지면 소수가 아니기에 반복문 탈출
}
}
// 끝까지 나누어 떨어지지 않으면 소수 배열에 저장
if(ptr == i) {
prime[ptr++] = n;
}
}
// 찾은 ptr개의 소수 출력
for (int i = 0; i < ptr; i++) {
System.out.println(prime[i]);
}
System.out.println("나눗셈을 수행한 횟수: " + count);
}
}
/*
나눗셈을 수행한 횟수: 14622
*/
1000 이하의 소수 나열(버전3)
package ch02_1;
// 1000이하의 소수 나열(버전3)
public class Ex15_primeNumber3 {
public static void main(String[] args) {
int count = 0; // 곱셈과 나눗셈의 횟수
int ptr = 0; // 찾은 소수 개수
int[] prime = new int[500]; // 소수 배열
prime[ptr++] = 2; // 소수 2
prime[ptr++] = 3; // 소수 3
// 홀수만 조사
for (int n = 5; n <= 1000; n+=2) {
boolean flag = false;
// prime[i]의 제곱이 n 이하인지 판단
for (int i = 1; prime[i]*prime[i] <=n ; i++) {
count += 2;
// 나누어 떨어지면 소수가 아니기에 반복문 탈출
if(n % prime[i] == 0) {
flag = true;
break;
}
}
// 마지막까지 나눠지지 않았을 경우 소수 배열에 저장
if(!flag) {
prime[ptr++] = n;
// prime[i]*prime[i] <=n 조건이 성립하지 않는 경우 여기서곱셉 연산 횟수 증가시켜줌
count++;
}
}
// 찾은 ptr개의 소수 출력
for (int i = 0; i < ptr; i++) {
System.out.println(prime[i]);
}
System.out.println("곱셈과 나눗셈을 수행한 횟수: " + count);
}
}
/*
곱셈과 나눗셈을 수행한 횟수: 3774
*/
배열 요소의 접근
접근 여부는 모두 런타임(실행 시)에 검사 → 만약 범위를 벗어나는 인덱스값을 사용하면 IndexOutOfBoundsException 발생
배열 복제
package ch02_1;
import java.util.Arrays;
// 배열 복제
public class Ex16_cloneArray {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] b = a.clone(); // b는 a의 복제를 참조
b[3] = 0; // 한 요소에만 0 대입
System.out.println("a = " + Arrays.toString(a));
System.out.println("b = " + Arrays.toString(b));
}
}
/*
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 0, 5]
*/
배열의 모든 요소의 합을 구하여 출력(확장 for문)
package ch02_1;
// 배열의 모든 요소의 합을 구하여 출력(확장 for문)
public class Ex17_arraySumForIn {
public static void main(String[] args) {
double[] a = {1.0, 2.0, 3.0, 4.0, 5.0};
for (int i = 0; i < a.length; i++) {
System.out.println("a[" + i + "] = " + a[i]);
}
double sum = 0; // 합계
for(double i : a) {
sum += i;
}
System.out.println("모든 요소의 합은 " + sum + "입니다.");
}
}
/*
a[0] = 1.0
a[1] = 2.0
a[2] = 3.0
a[3] = 4.0
a[4] = 5.0
모든 요소의 합은 15.0입니다.
*/
'공부기록 > 알고리즘' 카테고리의 다른 글
Chapter 03-2. 검색 알고리즘_선형 검색 (0) | 2024.08.04 |
---|---|
Chapter 03-1. 검색 알고리즘_검색 알고리즘이란 (0) | 2024.08.04 |
Chapter 02-2. 기본 자료구조_클래스란 (0) | 2024.06.22 |
Chapter 01-2. 기본 알고리즘_반복 (2) | 2023.11.19 |
Chapter 01-1. 기본 알고리즘_알고리즘이란? (0) | 2023.11.19 |
댓글