배열 Array
같은타입, 같은 의미를 가지는 변수들의 집합 (참조변수)
객체를 생성하는 키워드 : new
- 배열을 선언하는 방법
타입[] 배열이름;
타입 배열이름[];
- 선언하고 생성(new) 초기화하는 방법 : 객체를 생성하면 자동으로 초기화해줌.
타입[] 배열이름 = new 타입[길이]; - 가장많이 사용하는 방식
타입[] 배열이름 = new 타입[]{값,값,값,값};
타입[] 배열이름 = {값,값,값,값}; // 실무에서는 잘안쓰고 연습할 때 사용
배열의 길이는 0 이상이어야한다.
배열의 시작번지(index)는 0부터 시작.
배열의 길이는 length(총길이)를 이용하면 알 수 있음.
배열을 사용하는 이유
- 관리가 편함.
- 반복문을 사용 할 수 있기 때문에 많은 양의 데이터를 쉽게 관리
ex)
public static void main(String[] args) {
/* arr 배열의 합계와 평균을 출력
* 최대값, 최소값
* 합격자 수 출력( 점수가 70이상이면 합격)
* */
int arr[] = new int[] {10,84,76,91,94,45,59,60,12,3,75,20,35};
int sum = 0;
int max = arr[0];
int min = arr[0];
int count = 0; // 합격자 수
for(int i=0; i <arr.length; i++) {
sum += arr[i];
max = Math.max(max,arr[i]);
min = Math.min(min,arr[i]);
if(arr[i] >= 70) {
count++;
}
}
double avg = (double)sum / arr.length;
System.out.println("배열의 합계:"+ sum);
System.out.println("배열의 평균:"+ avg);
System.out.println("최댓값:" + max + "최소값:"+ min);
System.out.printf("총 인원수 %d명 중 %d명 합격%n" , arr.length,count);
}
}
향상된 for문
for( 자료형 변수명 : 배열명){
문장
}
배열을 사용할 순 있지만 절대 수정할 수는 없다.
배열복사
System.arraycopy(이전배열, 시작번지, 새배열, 시작번지, 개수)
배열은 처음 선언 때 정한 개수를 변경할 수 없음.
배열은 추가/삭제가 불가능.
배열의 값을 추가하려면 기존 배열을 버리고, 더큰 배열로 교체해야함.
ex)
public static void main(String[] args) {
// System.arraycopy(이전배열, 시작번지, 새배열, 시작번지, 개수)
int arr[] = new int[] {50,78,48,59,63};
int arr1[] = new int[] {85,97,58};
int arr2[] = new int[arr.length+arr1.length];
System.arraycopy(arr, 0, arr2, 0, arr.length);
System.arraycopy(arr1, 0, arr2, arr.length, arr1.length);
for(int i : arr2) {
System.out.print(i+" ");
}
System.out.println();
}
다차원배열
타입 [][] 배열이름 = new 타입[행의수][열의수];
ex)
public static void main(String[] args) {
/* 2차원 배열
* 10 20 30
* 40 50 60
* 70 80 90
* 100 110 120
* 130 140 150
* 자료형 배열명[][] new 자료향[5][3] // 5행 , 3열
*/
int arr[][] = new int[5][3];
int cnt = 1;
for(int i=0; i < arr.length; i++) { // 0~4 행 반복
for(int j=0; j<arr[0].length; j++) { // 첫 행의 열.length
arr[i][j] = cnt*10;
cnt++;
System.out.print(arr[i][j]+" ");
}
System.out.println(); // 줄바꿈
}
}