배열
- 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조
- score 배열의 각 인덱스는 각 항목의 데이터를 읽거나 저장하는데 사용
- 배열 이름 옆에 대괄호에 [] 기입된다. 인덱스는 0부터 시작한다. score[인덱스]
- 배열은 같은 타입의 데이터만 저장할 수 있다.
- 한번 생성된 배열은 길이를 늘리거나 줄일 수 없다
배열 선언
- 배열을 사용하기 위해서는 우선 배열 변수를 선언해야 한다.
int[] intArray;
double[] doubleArray;
String[] strArray;
int intArray[];
double doubleArray[];
String strArray[];
배열 생성
1) 값 목록으로 배열 생성
타입[] 변수 = {값0, 값1, 값2, ...};
- 중괄호 {}는 주어진 값들을 항목으로 가지는 배열 객체를 힙에 생성하고, 배열 객체의 번지를 리턴한다. 배열 변수는 리턴된 번지를 저장함으로써 참조가 이루어진다.
2) new 연산자로 배열 생성
- 값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new 연산자로 다음과 같이 배열 객체를 생성할수 있습니다.
타입[] 변수 = new 타입[길이]; // 길이는 배열이 저장할 수 있는 값의 개수
int[] intArray = new int[5] // 길이가 5인 int[]배열 생성
- int 배열 이므로 모두 기본값 0으로 초기화됨 -> String 배열을 생성한다면 null값으로 초기화 된다.
배열 길이
- 배열의 길이란 배열에 저장할 수 있는 전체 항목의 개수
- 배열 변수.length;
- length 필드는 읽기 전용 필드이기 때문에 값을 바꿀 수 없음. (ex) intArray.length = 10; //잘못된 코드
다차원 배열
- 값들이 행과 열로서 구성된 배열을 2차원 배열이라고 한다.
int[][] scores = new int[2][3];
scores.length //2
scores[0].length //3
scores[1].length //3
int[ ][ ] scores = { {95, 80}, {92, 96} };
95 | 80 |
92 | 96 |
객체를 참조하는 배열
- 참조 타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 가지고 있다.
(ex) String은 클래스이므로 String[] 배열은 각 항목에 문자열이 아니라, String 객체의 번지를 가지고 있다. 따라서 String[] 배열의 항목도 결국 String 변수와동일하게 취급되어야 한다.
배열 복사
- for문을 사용하거나 System.arraycopy() 메소드를 사용해 배열 간의 항목 값들을 복사한다.
System.arraycopy(arrl, 0, arr2, 0, arrl.length);
->원본 배열이 arr1이고 새 배열이 arr2일 경우 arr1의 모든 항목(0부터)을 arr2(0부터)에 복사
향상된 for문
- for문의 괄호 ()에는 배열에서 꺼낸 항목을 저장할 변수 선언과 콜론(:) 그리고 배열을 나란히 작성합니다. 배열 및 컬렉션 항목의 개수만큼 반복하고, 자동적으로 for문을 빠져나간다.
- for문이 처음 실행될 때 배열(①)에서 가져올 첫 번째 값이 존재하는지 평가합니다.
- 가져올 값이 존재하면 해당 값을 변수(②)에 저장합니다.
- 실행문(③)을 실행합니다.
- 블록 내부의 실행문(③)이 모두 실행되면 다시 루프를 돌아 배열 (①)에서 가져올 다음 값이 존재하는지 평가합니다
- 만약 다음 항목이 존재하면 ② 一 ③ — ① 순서로 루프를 다시 진행하고, 가져올 다음 항목이 없 으면 for문이 종료됩니다.
public class AdvancedForExample {
public static void main(String[] args) {
int[] scores = { 95, 71, 84, 93, 87 };
int sum = 0;
for (int score : scores) {
sum = sum + score;
}
System.out.println("점수 총합 = " + sum);
double avg = (double) sum / scores.length;
System.out.printin("점수 평균 = " + avg);
}
}
//점수 총합 = 430
//점수 평균 = 86.0
► 확인 문제
1. 배열을 생성하는 방법으로 틀린 것은 무엇입까?
② int[] array; array = {1, 2, 3 };
-> 배열 변수를 이미 선언한 후에 다른 실행문에서 중괄호를 사용한 배열 생성은 허용되지 않음
변수 = new 타입 [] {값0, 값1, 값2, ... }; // new 연산자를 사용해 값 지정
2 배열의 기본 초기값에 대한 설명으로 틀린 것은 무엇입니까?
③ boolean 타입 배열 항목의 기본 초기값은 tme이다.
-> false임
3. 배열의 길이에 대한문제입니다. array.length의 값과 array[2].length의 값은 얼마입니까?
array.length -> 3, array[2].length -> 5
4. for문을 이용해서 주어진 배열의 항목에서 최대값을 구해보세요.
package sec02.verify.exam04;
public class Exam04 {
public static void main(String[] args) {
int max = 0;
int[] array = { 1, 5, 3, 8, 2 };
//시작
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
}
System.out.println("max: " + max);
}
}
5. 중첩 for문을 이용해서 주어진 배열의 전체 항목의 합과 평균값을 구해보세요.
package sec02.verify.exam05;
public class Exam05 {
public static void main(String[] args) {
int[][] array = {
{ 95, 86 },
{ 83, 92, 96 },
{ 78, 83, 93, 87, 88 }
};
int sum = 0;
double avg =0.0;
//시작
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
sum += array[i][j];
count++;
}
}
avg = (double) sum / count;
System.out.println("sum: " + sum);
System.out.println(”avg: " + avg);
}
}
6. 다음은 키보드로부터 학생 수와 각학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구 하는 프로그램입니다. 실행결과를 보고 알맞게 작성해보세요.
package sec02.verify.exam06;
import java.util.Scanner;
public class Exam06 {
public static void main(String[] args) {
boolean run = true;
int studentNum = 0;
int[] scores = null;
Scanner scanner = new Scanner(System.in);
while (run) {
System, out. println("-------------------------------------------------- ");
System.out.println("l.학생수 | 2.점수입력 ! 3.점수리스트 | 4.분석 | 5.종료");
System, out. println("-------------------------------------------------- ");
System.out.print("선택> ");
int selectNo = Integer.parselnt(scanner.nextLine());
if (selectNo == 1) {
//시작
System.out.print("학생수> ");
studentNum = Integer, parselnt (scanner. nextLine());
scores = new int[studentNum];
} else if (selectNo == 2) {
//시작
for (int i = 0; i < scores.length; i++) {
System.out.print("scores[" + i + "]> ");
scores[i] = Integer.parselnt(scanner.nextLine());
}
} else if (selectNo == 3) {
//시작
for (int i = 0; i < scores.length; i++) {
System.out.printlnC"scores[" + i + "]: " + scores[i]);
}
} else if (selectNo == 4) {
//시작
int max = 0;
int sum = 0;
double avg = 0;
for (int i = 0; i < scores.length; i++) {
max = (max < scores[i]) ? scores[i] : max;
sum += scores[i];
}
avg = (double) sum / studentNum;
System.out.println("최고 점수: " + max);
System.out.println("평균 점수: " + avg);
} else if (selectNo == 5) {
run = false;
}
}
System.out.println("프로그램 종료");
}
}
'JAVA' 카테고리의 다른 글
생성자 (0) | 2022.10.12 |
---|---|
열거 타입 (1) | 2022.09.26 |
참조 타입 (1) | 2022.09.26 |
반복문 (2) | 2022.09.26 |
조건문 (0) | 2022.09.26 |