Java - 다차원 배열
예를 들어서 국어성적을 여러개 저장하기 위한 큰 저장소를 만든다고 가정하자.
int[] kors1 int[] kors2 int[] kors3
kors[30] -> kors1 (0번) kors[31] -> kors1 (크게 3칸씩 1번) kors[3*2] -> kors1 (크게 3칸씩 2번가는것)
kors[0] = kors[30 +0] -> kors[0][0] kors[1] = kors[30 +1] -> kors[0][1] kors[2] = kors[31 +2] -> kors[0][2] kors[3] = kors[31 +0] -> kors[1][0] kors[4] = kors[31 +1] -> kors[1][1] kors[5] = kors[31 +2] -> kors[1][2] kors[6] = kors[32 +0] -> kors[2][0] kors[7] = kors[32 +1] -> kors[2][1] kors[8] = kors[3*2 +2] -> kors[2][2]
오.. 이렇게 보니까 이해가 잘된다.
int[][] kors = new int[3][3]
-> 세개짜리 학년이 3개가필요하다.
총 9개 int 배열을 만들고, 두개로 나눠쓸수있게하겠다.
예제) 다차원배열 이해를 돕기위해 표현식을 쓰지않은 예시이다.
import java.util.Scanner;
public class Test_1 {
public static void main(String[] args) {
int[] kors = new int[3*3]; //두개 차원인지모를수있기때문에 곱하기 꼭넣어줘야함.
int menu;
int total;
float avg;
for(int j = 0; j<3; j++)
for(int i= 0 ; i<3; i++)
kors[3*j+i] =0;
종료 :
while(true) {
Scanner s= new Scanner(System.in);
System.out.println("┌──────────────────────┐");
System.out.println("│ 메인 메뉴 │");
System.out.println("└──────────────────────┘");
System.out.println("\t1.성적 입력");
System.out.println("\t2.성적 출력");
System.out.println("\t3.종료");
System.out.print("\t선택 >");
menu =s.nextInt();
switch(menu) {
case 1:
// ------ 성적 입력 부분
System.out.println("┌──────────────────────┐");
System.out.println("│ 성적 입력 │");
System.out.println("└──────────────────────┘");
for(int j= 0 ;j<3 ; j++)
for(int i= 0 ; i<3 ; i++)
do {
System.out.printf("%d학년 국어 %d:",j+1, i+1);
kors[3*j+i] = s.nextInt();
if(kors[3*j+i] <0 || 100<kors[3*j+i] )
System.out.println("성적범위(0~100)를 벗어났습니다.");
}while(kors[3*j+i] <0 || 100<kors[3*j+i] );
break;
// ----------------성적 출력부분
case 2:
System.out.println("┌──────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└──────────────────────┘");
for(int j= 0 ;j<3 ; j++) {
total = kors[3*j+0]+kors[3*j+1]+kors[3*j+2];
avg = total/3.0f;
System.out.printf("<%d 학년의 국어성적> ------\n",j+1);
for(int i = 0 ; i<3; i++)
System.out.printf("\t국어%d : %3d\n",i+1, kors[3*j+i]);
System.out.printf("\t총점 : %3d\n", total);
System.out.printf("\t평균 : %6.2f\n", avg);
System.out.println("──────────────────────────────");
}
break;
case 3:
break 종료;
default:
System.out.println("입력오류 1~3번까지만 입력할수있습니다.");
}
}
System.out.println("good bye");
}
}
예시) 다차원의 표현식을 사용한 예시이다. 위와 비교하면 엄청 간편한걸 알수있다.
import java.util.Scanner;
public class Test_1 {
public static void main(String[] args) {
int[][] kors =new int[3][3];
int menu;
int total;
float avg;
for(int j = 0; j<3; j++)
for(int i= 0 ; i<3; i++)
kors[j][i] = 0;
종료 :
while(true) {
Scanner s= new Scanner(System.in);
System.out.println("┌──────────────────────┐");
System.out.println("│ 메인 메뉴 │");
System.out.println("└──────────────────────┘");
System.out.println("\t1.성적 입력");
System.out.println("\t2.성적 출력");
System.out.println("\t3.종료");
System.out.print("\t선택 >");
menu =s.nextInt();
switch(menu) {
case 1:
// ------ 성적 입력 부분
System.out.println("┌──────────────────────┐");
System.out.println("│ 성적 입력 │");
System.out.println("└──────────────────────┘");
for(int j= 0 ;j<3 ; j++)
for(int i= 0 ; i<3 ; i++)
do {
System.out.printf("%d학년 국어 %d:",j+1, i+1);
kors[j][i] = s.nextInt();
if(kors[j][i]<0 || 100<kors[j][i] )
System.out.println("성적범위(0~100)를 벗어났습니다.");
}while(kors[j][i] <0 || 100<kors[j][i]);
break;
// ----------------성적 출력부분
case 2:
System.out.println("┌──────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└──────────────────────┘");
for(int j= 0 ;j<3 ; j++) {
total = kors[j][0]+kors[j][1]+kors[j][2];
avg = total/3.0f;
System.out.printf("<%d 학년의 국어성적> ------\n",j+1);
for(int i = 0 ; i<3; i++)
System.out.printf("\t국어%d : %3d\n",i+1, kors[j][i]);
System.out.printf("\t총점 : %3d\n", total);
System.out.printf("\t평균 : %6.2f\n", avg);
System.out.println("──────────────────────────────");
}
break;
case 3:
break 종료;
default:
System.out.println("입력오류 1~3번까지만 입력할수있습니다.");
}
}
System.out.println("good bye");
}
}
참고 : https://youtu.be/LyRC4DQQ4SE
댓글남기기