-
2차원 배열: 자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재. 2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여(앞 번호는 행, 뒷 번호는 열)
2차원 배열 선언
- 자료형[][] 배열명;
- 자료형 배열명[][];
- 자료형[] 배열명[];
2차원 배열 할당
- 자료형[][] 배열명 = new 자료형[행크기][열크기]
- 자료형 배열명[][] = new 자료형[행크기][열크기]
- 자료형[] 배열명[] = new 자료형[행크기][열크기]
2차원 배열 초기화
- 인덱스 이용 초기화
arr[0][0] = 1;
arr[1][1] = 2;
- for문 이용 초기화
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = j; } }
- 선언 동시 초기화
int[][] arr = {{1,2,3,4}, {5,6,7,8}};
inr[][] arr = new int[][] {{1,2,3,4}, {5,6,7,8}};
더보기123456789101112131415161718192021222324252627282930313233343536public void testDemensionArray() {//2차원배열 선언int[][] arr;int[] arr2[];int arr3[][];//2차원배열 할당: new 연산자를 통해 heap영역에 공간 생성arr = new int[3][5];//열의 크기 생략 가능//각 행마다 다른 열의 개수 가지고 싶을 때: 가변 배열arr2 = new int[2][];arr2[0] = new int[4];arr2[1] = new int[2];//2차원배열에 직접 값 접근System.out.println(arr); //arr의 주소 값System.out.println(arr[0]); //arr[0]의 주소 값System.out.println(arr[0][0]);//실제 값에 접근//2차원배열 초기화int num =1;for(int i = 0; i < arr2.length; i++) {for(int j = 0; j <arr2[i].length; j++) {//arr2 가변배열이므로 arr2[0]에는 0,1,2,3열 arr2[1]은 0,1열arr2[i][j] = num++;}}//2차원배열 출력for(int i = 0; i < arr2.length; i++) {for(int j = 0; j <arr2[i].length; j++) {System.out.print(arr2[i][j]+ " ");}System.out.println();//개행}}cs ※문제. 사용자에게 행의 크기를 입력 받고, 그 수만큼의 반복을 통해 열의 크기도 받아 문자형 가변 배열을 선언 및 할당하시오. 그리고 각 인덱스에 'a'부터 총 인덱스의 개수만큼 하나씩 늘려 저장하고 출력하시오.
12345678910111213141516171819202122public void method1() {//가변배열 초기화 및 출력Scanner sc = new Scanner(System.in);System.out.print("행의 크기 입력: ");char[][] arr = new char[sc.nextInt()][];//열 할당for(int i = 0; i < arr.length; i++) {System.out.print(i + "행의 열의 크기 입력: ");arr[i] = new char[sc.nextInt()];}//초기화와 출력char ch = 'a';for(int i = 0; i <arr.length; i++) {for(int j = 0; j < arr[i].length; j++) {arr[i][j] = ch++;System.out.print(arr[i][j] + " ");}System.out.println();}}cs 변수, 배열에는 언제나 기본값이 있기 때문에 내가 원하는 값으로 초기화해야 한다는 걸 항상 유의하기
※문제. 문자형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해 2차원 배열을 출력하시오. 또한 계속해서 반복 실행하도록 구현하고 행이나 열 입력 시 0미만 5이상의 수가 입력되면 프로그램을 종료하시오.
12345678910111213141516171819202122232425262728public void method2() {Scanner sc = new Scanner(System.in);char[][] arr = new char[5][5];int row;int column;while(true) {System.out.print("행 인덱스 입력 >> ");row = sc.nextInt();System.out.print("열 인덱스 입력 >> ");column = sc.nextInt();if(row <0 || row >4 || column < 0 || column > 4) {break;}arr[row][column] = 'X';System.out.println("\t0\t1\t2\t3\t4");for(int i = 0; i <arr.length; i++) {System.out.print(i + "\t");for(int j = 0; j < arr[i].length; j ++) {System.out.print(arr[i][j] + "\t");}System.out.println();}System.out.println();}System.out.println("프로그램을 종료합니다.");}cs 이 문제는 '배열 초기화 -> 행과 열 변수를 int로 지정 -> 무한 루프 생성 후 Scanner로 변수 값 받기 -> if문을 이용해서 행렬의 출력 조건 충족 여부 가늠' 이라는 단계로 풀어 나가야 한다.
무한 루프에서는 무조건 break 걸어주는 거 잊지 말고 단마다 구분가도록 개행도 잊지 않을 것.
\t를 처음 접해서 뭘까 했는데 tab 기능을 한다. 이렇게 오늘도 작은 팁을 얻어감.
'혼자 있는 방 > Java' 카테고리의 다른 글
객체 간 협력 (0) 2021.05.30 중간 복습(Review) (0) 2021.05.06 Array(배열) (0) 2021.05.04 Repetitive(반복문) 2 (0) 2021.05.02 Repetitive(반복문) 1 (0) 2021.04.30 댓글