9.21 6-2일 차 ArrayType02(2차원배열)
ArrayType02
2차원배열 : 1 차원 배열이 y축으로 쌓인 것
1.배열선언 : 스택에 주소저장할 라는 arrNum이름의 메모리 생성
int [ ] [ ] arrNum ; 이거랑 int arrNum [ ][ ] ; 같다
2.메모리(실제 데이타를 저장하는) 할당
arrNum = new int [2][3]; new int [2][3]; (2-1)행 (3-1)열 임. 인덱스는 0부터 시작
System.out.println(arrNum);
System.out.println(arrNum[0]); 0행 전체의 시작주소
System.out.println(arrNum[1]); 1행 전체의 시작주소 요건 1차원 배열이네????
System.out.println(arrNum[0][0]);
System.out.println(arrNum[1][2]);
System.out.println("[초기화 전]");
for(int i=0 ; i< 2 ; i++) { i가 행
for(int k =0 ; k<3;k++) { k가 열
System.out.printf("arrNum[%d][%d]:%-3d",i,k,arrNum[i][k]);
}
System.out.println(); 줄바꿈
}
=>출력
초기화 전
arrNum[0][0]:0 arrNum[0][1]:0 arrNum[0][2]:0
arrNum[1][0]:0 arrNum[1][1]:0 arrNum[1][2]:0
3.초기화하기 (배열에 저장)
arrNum[0][0] = 1;
arrNum[0][1] = 2;
arrNum[0][2] = 3;
arrNum[1][0] = 4;
arrNum[1][1] = 5;
arrNum[1][2] = 6;
System.out.println("[초기화 후]");
for(int i=0 ; i < 2 ; i++) { //i가 행
for(int k = 0 ; k<3;k++) { //k가 열
System.out.printf("arrNum[%d][%d]:%-3d",i,k,arrNum[i][k]);
}
System.out.println(); //줄바꿈
}
=>출력
초기화 후
arrNum[0][0]:1 arrNum[0][1]:2 arrNum[0][2]:3
arrNum[1][0]:4 arrNum[1][1]:5 arrNum[1][2]:6
3.인덱스 크기 가져오기 (배열 총 개수!)
2차원 배열에서 행의 수는 배열명.length
열의수는 배열명[행인덱스].length 왜냐면 열은 행마다 다를 수 가 있거든!
System.out.println("행의수:"+arrNum.length);
System.out.println("0행의 열의 수:"+arrNum[0].length);
System.out.println("1행의 열의 수:"+arrNum[1].length);
=>출력
행의수:2
0행의 열의 수:3
1행의 열의 수:3
System.out.println("[행 및 열의 수를 length속성으로 변경]");
for(int i=0 ; i < arrNum.length ; i++) { i가 행
for(int k = 0 ; k< arrNum[i].length ; k++) { k가 열
System.out.printf("arrNum[%d][%d]:%-3d",i,k,arrNum[i][k]);
}
System.out.println(); 줄바꿈
}
=>출력
[행 및 열의 수를 length속성으로 변경]
arrNum[0][0]:1 arrNum[0][1]:2 arrNum[0][2]:3
arrNum[1][0]:4 arrNum[1][1]:5 arrNum[1][2]:6
6.각 행마다 열의 수를 다르게 할거임
int dynamic[ ][ ]=new int [2][ ]; 열을 동적으로 할당하기 위해 열의 수 미지정
System.out.println(dynamic); 2행짜리 메모리가 생기긴 했음 but가건물이라 메모리저장이 안됨
System.out.println(dynamic[0]); 0행 전체의 시작주소: null, 메모리가 완전히 만들어지지 않았기 때문에
dynamic[0] = new int[3];
System.out.printf("0행의 시작 주소:%s,0행의 열의 수:%d%n",dynamic[0],dynamic[0].length); 이제 주소생김!
dynamic[1] = new int[1]; 1행까지 메모리 할당함
for(int i=0 ; i < dynamic.length ; i++) { i가 행
for(int k = 0 ; k< dynamic[i].length ; k++) { k가 열
System.out.printf("dynamic[%d][%d]:%-3d",i,k,dynamic[i][k]); 빈 메모리 보일 수 있게
}
System.out.println(); 줄바꿈
}
=> 출력
dyamic[0][0]:0 dyamic[0][1]:0 dyamic[0][2]:0
dyamic[1][0]:0
7.초기화로 메모리 안에 값 저장저장저장저장
for(int i=0 ; i < dynamic.length ; i++) { i가 행
for(int k = 0 ; k< dynamic[i].length ; k++) { k가 열
dynamic[i][k]= i+k; 이 값을 저장
}
}
8.출력
System.out.println("[초기화 후]");
for(int i=0 ; i < dynamic.length ; i++) { i가 행
for(int k = 0 ; k< dynamic[i].length ; k++) { k가 열
System.out.printf("dynamic[%d][%d]:%-3d",i,k,dynamic[i][k]);
}
System.out.println(); 줄바꿈
}
=>출력
[초기화 후]
dynamic[0][0]:0 dynamic[0][1]:1 dynamic[0][2]:2
dynamic[1][0]:1
9.선언과 동시의 초기화
int [ ][ ] arrInit = {{1,2},{1,2,3},{1}}; 초기화자안의 {}의 개수는 행, {}안의 값의 수가 열 의미!
그니께
바깥 {}는 초기화를 위한 중괄호
바깥 {}안의 {}의 수가 행의 수를 의미
안쪽 {}안의 값의 수가 열의 수를 의미
System.out.println("[초기화자 사용]");
for(int i=0 ; i < arrInit.length ; i++) { i가 행
for(int k = 0 ; k< arrInit[i].length ; k++) { k가 열
System.out.printf("(%d행,%d열):%-3d",i,k,arrInit[i][k]);
}
System.out.println(); 줄바꿈
}
=>출력
[초기화자 사용]
arrlnit[0][0]:1 arrlnit[0][1]:2
arrlnit[1][0]:1 arrlnit[1][1]:2 arrlnit[1][2]:3
arrlnit[2][0]:1
1 9 9 9 9
9 1 9 9 9
9 9 1 9 9
9 9 9 1 9
// 문1) 행렬만들기, 2차원 배열선언, 선언과동시에 메모리할당
int [ ][ ] arrNum_ = new int [4][5];
// 문2) 1번에서 선언한 배열에 저장 ***** 요거 좀 잘 공부하자 *****
for(int i=0 ; i < arrNum_.length; i++ ) {
for(int k=0 ; k < arrNum_[i].length ; k ++ ) {
if(i == k) arrNum_[i][k]=1;
else arrNum_[i][k]=9;
}
}
//문3 출력
for(int i=0 ; i < arrNum_.length; i++ ) {
for(int k=0 ; k < arrNum_[i].length ; k ++ ) {
System.out.printf("%-2d",arrNum_[i][k]);
}
System.out.println();
}
=>출력
1 9 9 9 9
9 1 9 9 9
9 9 1 9 9
9 9 9 1 9