"배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것"
int score1, score2, score3, score4, score5; // 학생 5명의 점수를 저장하기 위한 변수 선언 int [] score = new int[5] // 5개의 int 값을 저장할 수 있는 배열을 생성한다.
1. 타입[] 변수이름;
int[] score; String[] name;
2. 타입 변수이름[];
int score[]; String name[];
타입[] 변수이름; // 배열을 선언(배열을 다루기 위한 참조변수 score선언)
변수이름 = new 타입[길이]; // 배열을 생성(실제 저장공간을 생성)int[] score = new int[5]; // 선언과 생성을 동시에
1. int[] score;
int형 배열 참조변수 score를 선언한다. 데이터를 저장할 수 있는 공간은 아직 마련되지 않았다.
score
□
2. score = new int[5];
연산자 'new'에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다.
score score[0] score[1] score[2] score[3] score[4]
□ □ □ □ □ □
그리고 각 배열 요소는 자동적으로int의 기본값인 0으로 초기화 된다.
score score[0] score[1] score[2] score[3] score[4]
□ □ □ □ □ □
0 0 0 0 0
끝으로 대입 연산자 '='에 의해 배열의 주소가 int형 배열 참조변수 score에 저장된다.
"인덱스(index)의 범위는 0부터 '배열길이-1'까지"
int[] score = new int[5]; // 길이가 5인 int배열. // 인덱스는 0부터 4까지 score[0], score[1], score[2], score[3], score[4]
✨ 예제 1
public class ArrayEx1 {
public static void main(String[] args) {
int[] score = new int[5];
int k = 1;
score[0] = 50;
score[1] = 60;
score[k+1] = 70; // score[2] = 70
score[3] = 80;
score[4] = 90;
for (int i=0; i<5; i++) {
System.out.println(score[i]);
}
}
}
int[] arr = new int[5]; // 길이가 5인 int 배열
int tmp = arr.length; // arr.length값은 5이고, tmp에 5가 저장된다.
✨ 예제 2
int[] score = new int[5]; // 배열의 길이 5
for (int i=0; i<6; i++) {
System.out.println(socre[i]);
} // 에러발생. 유효 인덱스 범위 초과!
// 이 경우 for문의 조건식에서 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를 사용하는 것이 좋다.
int[] score = new int[5]; // 배열의 길이 5
for (int i=0; i<score.length; i++) {
System.out.println(socre[i]);
}
"배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화되므로 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만, 원하는 값을 저장하려면 아래와 같이 각 요소마다 값을 지정해 줘야한다."
int[] score = new int[]{50, 60, 70, 80, 90); // 배열의 생성과 초기화를 동시에 // 괄호{} 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 괄호[] 안의 길이는 안적어도 된다.
int[] arr = new int[5];
...
int[] tmp = new int[arr.length*2] // 기존 배열보다 길이가 2배인 배열 생성
for(int i=0; i<arr.length; i++)
tmp[i] = arr[i]; // arr[i]의 값을 tmp[i]에 저장
arr = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다.
System.arraycopy(num, 0, newNum, 0, num.length);
// num[0]에서 newNum[0]으로 num.length개의 데이터를 복사
public class ArrayEx2 {
public static void main(String[] args) {
int sum = 0;
float average = 0f;
int[] score = {100, 80, 100, 100, 90};
for (int i=0; i<score.length; i++) {
sum += score[i];
}
average = sum / (float)score.length;
System.out.println("총점: "+sum);
System.out.println("평균: "+average);
}
}
public class ArrayEx3 {
public static void main(String[] args) {
int[] score = {79, 88, 91, 33, 100, 55, 95};
int max = score[0]; // 배열의 첫 번째 값으로 최댓값을 초기화 한다.
int min = score[0]; // 배열의 첫 번째 값으로 최솟값을 초기화 한다.
for (int i=1; i<score.length; i++) {
if (score[i]> max) {
max = score[i];
} else if(score[i]<min) {
min = score[i];
}
} // end of for
System.out.println("최댓값: "+max);
System.out.println("최솟값: "+min);
}
}
for (i=0; i<arr.length; i++) {
arr[i] = (int)(Math.random()*5); // 0~4범위의 임의의 값을 저장
}
public class ArrayEx4 {
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i=0; i<numArr.length; i++) {
System.out.print(numArr[i] = (int)(Math.random() * 10 )); //0~9범위의 임의의 값을 저장
}
System.out.println();
for (int i=0; i<numArr.length-1; i++){
boolean changed = false; // 자리바꿈이 발생했는지를 체크한다.
for (int j=0; j<numArr.length-1-i; j++) {
if(numArr[j]>numArr[j+1]) { //옆의 값이 작으면 서로 바꾼다.
int tmp = numArr[j];
numArr[j] = numArr[j+1];
numArr[j+1] = tmp;
changed = true; // 자리바꿈이 발생했으니 changed를 true로.
}
}
if (!changed) break; // 자리바꿈이 없으면 반복문을 벗어난다.
for (int k=0; k<numArr.length; k++)
System.out.print(numArr[k]); // 정렬된 결과를 출력
System.out.println();
}
}
}
참고서적
자바의 정석(저자: 남궁성)
자바 배열 정말 어렵다. 파이썬에서는 굉장히 간단했는데 자바 문법은 신경써줘야 할 것도 많고, 복잡하다.
자바에도 파이썬에 내장함수인 sort()가 있을까? 설마 매번 저렇게 바꾸진 않겠지,,
파이썬과 자바의 큰차이를 느낀 단원.
코딩테스트 준비에서 배열 활용을 능숙하게 하는것은 자바 역시 필수일텐데.. 열심히 연습해야겠다.
다음은 String배열에 대해 공부하겠다.