JAVA/배열(array)
배열(array)_1
whale_it
2018. 8. 16. 21:22
chap 05 배열 - array
1.배열(array)
1.1 배열이란
- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
1.2 배열의 선언과 생성
- 타입[ ] 변수명; // int [ ] score;
- 타입 변수명[ ]; // int score[ ];
배열의 생성
- 타입[] 변수명; // 배열을 다루기 위한 참조변수 선언
- 변수이름 = new 타입[길이]; // 배열 실제 생성(실제 저장 공간)
1.3 배열의 길이와 인덱스
- 인덱스(index)는 배열의 요소마다 붙여진 일련번호
- 인덱스의 범위는 0 ~ 배열길이 - 1
- int[] score = new int[5]
score | score[0] | score[1] | score[2] | score[3] | score[4] | |
---|---|---|---|---|---|---|
0x100 | 0 | 0 | 0 | 0 | 0 |
xxxxxxxxxx
package ch05;
class ArrayEx01 {
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;
int tmp = score[k+2] + score[4]; // int tmp = score[3] + score[4]
// for문으로 배열의 모든 요소를 출력한다.
for(int i=0; i < 5; i++) {
System.out.printf("score[%d]:%d%n",i, score[i]);
}
System.out.printf("tmp:%d%n", tmp);
System.out.printf("score[%d]:%d%n",7,score[7]); //index의 범위를 벗어난 값
} // main
}
배열의 길이
- int 범위의 양의 정수(0 포함)
- 배열이름.length
- 배열은 생성 후 길이를 변경 할 수 없음
1.4 배열의 초기화
xxxxxxxxxx
int [] score = new int[5];
score[0] = 50;
score[1] = 50;
score[2] = 50;
score[3] = 50;
score[4] = 50;
- int [ ] score = new int [ ] { 50, 60, 70, 80, 90 }; // 배열이 생성 과 초기화
- int[ ] score = { 50, 60, 70, 80, 90 }; int [] 생략 가능
배열의 출력
xxxxxxxxxx
int[] iArr = {100, 95, 80, 70, 60};
for(int i=0; i<iArr.length; i++){
System.out.println(iArr[i]);
}
xxxxxxxxxx
package ch05;
import java.util.*; // Arrays.toString()을 사용하기 위해 추가
class ArrayEx02 {
public static void main(String[] args) {
int[] iArr1 = new int[10];
int[] iArr2 = new int[10];
// int[] iArr3 = new int[]{100, 95, 80, 70, 60};
int[] iArr3 = {100, 95, 80, 70, 60};
char[] chArr = {'a', 'b', 'c', 'd'};
for (int i=0; i < iArr1.length ; i++ ) {
iArr1[i] = i + 1; // 1~10의 숫자를 순서대로 배열에 넣는다.
}
for (int i=0; i < iArr2.length ; i++ ) {
iArr2[i] = (int)(Math.random()*10) + 1; // 1~10의 값을 배열에 저장
}
// 배열에 저장된 값들을 출력한다.
for(int i=0; i < iArr1.length;i++) {
System.out.print(iArr1[i]+",");
}
System.out.println();
System.out.println(Arrays.toString(iArr2)); // 보기 좋게 스트링으로 변환 해줌
System.out.println(Arrays.toString(iArr3));
System.out.println(Arrays.toString(chArr));
System.out.println(iArr3); // 배열의 내부 주소 출력
System.out.println(chArr); // char 배열 경우만 abcd 출력됨
}
}
1.5 배열의 복사
- 배열은 한번 생성 후 그 길이 변경이 안되므로 추가 공간이 필요시 큰 배열 만든 후 이전 배열 값 복사
xxxxxxxxxx
package ch05;
class ArrayEx03{
public static void main(String[] args) {
int[] arr = new int[5];
// 배열 arr에 1~5를 저장한다.
for(int i=0; i < arr.length;i++)
arr[i] = i + 1;
System.out.println("변경전 - arr.length:"+arr.length);
for(int i=0; i < arr.length;i++)
System.out.println("arr["+i+"]:"+arr[i]);
int[] tmp = new int[arr.length*2];
// 배열 arr에 저장된 값들을 배열 tmp에 복사한다.
for(int i=0; i < arr.length;i++)
tmp[i] = arr[i];
arr = tmp; // tmp에 저장된 값을 arr에 저장한다.
System.out.println("변경후 - arr.length:"+arr.length);
for(int i=0; i < arr.length;i++)
System.out.println("arr["+i+"]:"+arr[i]);
}
}
System.arraycopy() 를 이용한 배열의 복사
xxxxxxxxxx
// 배열 arr에 저장된 값들을 배열 tmp에 복사한다.
//for(int i=0; i < arr.length;i++)
// tmp[i] = arr[i];
System.arraycopy(arr, 0, tmp, 0, arr.length);
package ch05;
class ArrayEx04 {
public static void main(String[] args) {
char[] abc = { 'A', 'B', 'C', 'D'};
char[] num = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
System.out.println(abc);
System.out.println(num);
// 배열 abc와 num을 붙여서 하나의 배열(result)로 만든다.
char[] result = new char[abc.length+num.length];
System.arraycopy(abc, 0, result, 0, abc.length);
System.arraycopy(num, 0, result, abc.length, num.length);
System.out.println(result);
// 배열 abc을 배열 num의 첫 번째 위치부터 배열 abc의 길이만큼 복사
System.arraycopy(abc, 0, num, 0, abc.length);
System.out.println(num);
// number의 인덱스6 위치에 3개를 복사
System.arraycopy(abc, 0, num, 6, 3);
System.out.println(num);
}
}