배열안에 배열이 저장되어 있는 형태이다.
1) 2차원 배열의 선언
2) 2차원 배열의 생성
2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용된다.
int[][] score = new int[3][4];
//3행 4열의 2차원 배열 생성
//3칸짜리 배열안에 각 칸마다 4칸짜리 배열이 생성된다.
int arr[][] = new int[][]{{1,2,3},{4,5,6}};
//값의 개수로 배열의 길이가 정해진다.
int[] arr2[] = {{1,2,3}
,{4,5,6}
,{7,8,9}};
int[][] arr3 = new int[3][];//가변 배열
arr3[0] = new int[3];
arr3[1] = new int[4];
arr3[2] = new int[10];
//2차원 인덱스까지 접근해야 값을 사용할 수 있다.
System.out.println(arrp[0][1]);//2 출력
System.out.println(arrp[1][2]);//6 출력
System.out.println(arrp[0]);//값이 아니라 배열이기 때문에 주소가 나온다.
//2차원배열은 1차원에는 값을 저장할 수 없다.
//-> 값이 아니라 배열을 저장해야 한다.
//arr[0] = 10; //오류
arr[0] = new int[5];//1차원에 배열 저장
arr[0][0] = 10; //2차원까지 접근해야 값을 저장할 수 있다.
3명의 학생의 5과목의 점수를 랜덤으로 생성하고 합계와 평균을 구하시오.
int[][] scores = new int[3][5]; //int[학생수][과목수]
int[] sum = new int[scores.length]; //합계
//scores.length는 1차원 배열의 길이
double[] avg = new double[scores.length]; //평균
//3명의 학생에게 5과목 점수 랜덤 생성
for(int i = 0; i < scores.length; i++){
for(int j = 0; j < socres[i].length; j++){
//scores[i].length는 2차원 배열의 길이
socres[i][j] = (int)(Math.random() * 101);
}
}
//각 학생의 합계, 평균 구하고 출력하기
for(int i = 0; i < scores.length; i++){
for(int j = 0; j < scores[i].length; j++){
sum[i] += scores[i][j];
}
avg[i] = (double)sum[i] / scores[i].length;
System.out.println(i + 1 + "번 학생의 점수의 합계는 " + sum[i] + "점, 평균은 " + avg[i]+ "점 입니다.");
}