1차원 배열과 같은 방식으로 선언하고 생성한다.
선언과 생성을 동시에 하는 방법은 다음과 같다.
int[][] score = new int[4][3]; //4행3열의 2차원 배열
초기화 방법 역시 1차원 배열과 같다.
int[][] arr = new int[][]{{1,2,3},{4,5,6}};
int[][] arr = {{1,2,3},{4,5,6}};
변수.length는 2차원 배열의 행의 개수
변수[n].length는 n번째 행의 열의 개수
각 행의 열의 개수가 같은 배열
public class ScoreAvg {
public static void main(String[] args) {
double[][] score = {{3.3,3.4},
{3.5,3.6},
{3.7,4.0},
{4.1,4.2}}; //4행 2열
double sum = 0;
for(int year = 0; year<score.length; year++)
for(int term = 0; term<score[year].length; term++)
sum+=score[year][term];
int n = score.length; //4행
int m = score[0].length; //2열
System.out.println("score avg : " + sum/(n*m));
}
}
public class Array {
public static void main(String[] args) {
int[][] score = {
{100, 100, 100},
{20, 20, 20},
{30, 30, 30},
{40, 40, 40}
};
int sum = 0;
for(int i = 0; i< score.length; i++){
for(int j = 0; j< score[i].length; j++){
System.out.printf("score[%d][%d] = %d%n",i,j,score[i][j]);
sum += score[i][j];
}
}
System.out.println("sum = " + sum);
}
}
public class Array {
public static void main(String[] args) {
int[][] score = {
{100, 100, 100},
{20, 20, 20},
{30, 30, 30},
{40, 40, 40},
{50, 50, 50}
};
int korTotal = 0, engTotal = 0, mathTotal = 0;
System.out.println("번호 국어 영어 수학 총점 평균");
for (int i = 0; i < score.length; i++) {
int sum = 0;
float avg = 0.0f;
korTotal += score[i][0];
engTotal += score[i][1];
mathTotal += score[i][2];
System.out.printf("%3d", i + 1);
for (int j = 0; j < score[i].length; j++) {
sum += score[i][j];
System.out.printf("%5d", score[i][j]);
}
avg = sum / (float) score[i].length;
System.out.printf("%5d %5.1f%n", sum, avg);
}
System.out.printf("총점:%3d %4d %4d%n", korTotal, engTotal, mathTotal);
}
}
import java.util.Scanner;
public class Array {
public static void main(String[] args) {
String[][] words = {
{"chair", "의자"},
{"computer", "컴퓨터"},
{"interger", "정수"}
};
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < words.length; i++) {
System.out.printf("%d. %s의 뜻은? ", i + 1, words[i][0]);
String tmp = scanner.nextLine();
if (tmp.equals(words[i][1])) {
System.out.printf("정답입니다%n%n");
} else {
System.out.printf("틀렸습니다. 정답은 %s입니다.%n%n", words[i][1]);
}
}
}
}
각 행의 열의 개수가 다른 배열
이 때 0번째 행의 열의 개수는 1
1번째 행의 열의 개수는 2
2번째 행의 열의 개수는 3
3번째 행의 열의 개수는 4 이다.
비정방형 배열 역시 생성과 동시에 초기화를 통해 생성할 수 있다.
public class SkewedArray {
public static void main(String[] args) {
int[][] arr = {{0}, {1, 2}, {3, 4, 5}, {6, 7, 8, 9}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}
또 인덱스에 접근하여 값을 초기화해서 배열을 생성할 수도 있다.
public class SkewedArray {
public static void main(String[] args) {
int[][] arr = new int[4][]; //4행
arr[0] = new int[3];
arr[1] = new int[2];
arr[2] = new int[3];
arr[3] = new int[2];
for (int i = 0; i < arr.length; i++)
for (int j = 0; j < arr[i].length; j++)
arr[i][j] = (i + 1) * 10 + j;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}
public class SkewedArray {
public static void main(String[] args) {
int[][] mathScores = new int[2][3];
for(int i = 0; i< mathScores.length; i++) {
for (int k = 0; k < mathScores.length; k++) {
System.out.println("mathScores[" + i + "][" + k + "]=" + mathScores[i][k]);
}
}
System.out.println();
int[][] englishScores = new int[2][];
englishScores[0] = new int[2];
englishScores[1] = new int[3];
for(int i = 0; i< englishScores.length; i++) {
for (int k = 0; k < englishScores.length; k++) {
System.out.println("englishScores[" + i + "][" + k + "]" + englishScores[i][k]);
}
}
System.out.println();
int[][] javaScores = {{95,88},{92,66,80}};
for(int i = 0; i<javaScores.length; i++){
for(int k = 0; k<javaScores[i].length; k++){
System.out.println("javaScores["+i+"]["+k+"] =" + javaScores[i][k]);
}
}
}
}