학원/JAVA

9.21 6-2일 차 ArrayType02(2차원배열)

도원결의 2022. 9. 21. 23:00

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