Study/Academy

[Study #06] 2차원 배열

PEAZH 2023. 6. 14. 19:18
반응형

 

01. 2차원 배열

  • 배열 속에 배열이 있는 형태
  • 값들이 행과 열로 구성되어 있는 배열로, 가로 인덱스와 세로 인덱스를 사용
  • 기본 형식 : int[][] scores = new int[2][3]

[ 예시 ]

package jun09;

public class MultiArray01 {
	public static void main(String[] args) {
		int[] arr01 = new int[5];//1차원 배열
		int[][] arr02 = new int [5][5];//2차원 배열 = 5칸 안에 5칸이 또 있음
		
		//데이터 입력
		arr01[0] = 100;
		arr02[0][0] = 100;//[집][방번호]
		
		//마지막집, 마지막 방에 1000을 저장하기
		arr02[4][4] = 1000;
		
		//index 2, index 마지막 방에 55를 저장하기
		arr02[2][4] = 55;
        
		// 객체의 주소 출력
		System.out.println(arr02[0]);
		System.out.println(arr02[1]);
		System.out.println(arr02[2]);
		System.out.println(arr02[3]);
		System.out.println(arr02[4]);
		
		int[][] arr03 = new int[2][3]; //6칸
		
		System.out.println(arr03.length);//2
		System.out.println(arr03[0].length);//3
		
		int[] temp = arr03[0];//int타입의 배열을 arr03[0]을 넣는다
		System.out.println(temp.length);//3
		
	}
}

 

02. 2차원 배열 출력 방법

 

[ 방법 1 ] for문 이용하기 : for문을 겹쳐서 배열[i][j] 로 출력

package jun09;

public class MultiArray01 {
	public static void main(String[] args) {
    
		int[][] arr01 = new int [5][5];//2차원 배열 = 5칸 안에 5칸이 또 있음

		// 2차원 배열 출력
		for (int i = 0; i < arr01.length; i++) {
			for (int j = 0; j < arr01.length; j++) {//length가 같아서 똑같이 써도 됨 
				System.out.print(arr02[i][j]+" ");
			}
			System.out.println("");
		}
		// 0 0 0 0 0 
		// 0 0 0 0 0 
		// 0 0 0 0 0 
		// 0 0 0 0 0 
		// 0 0 0 0 0
		
		int[][] arr02 = new int[2][3]; //6칸
		for (int i = 0; i < arr02.length; i++) {//바깥쪽 배열
			//    길이가 다를땐 arr02[i].length 이렇게 써줘야 함
			for (int j = 0; j < arr02[i].length; j++) {//안쪽 배열
				System.out.print(arr03[i][j]+" ");
			}
			System.out.println("");
		}
		// 0 0 0
		// 0 0 0
        
	}
}

 

[ 방법 2 ] for-each문 이용하기 : 2차원의 배열을 1차원 배열에 차례로 넣어서 출력하기

package jun09;

import java.util.Arrays;

public class MultiArray {
public static void main(String[] args) {

        //배열 생성
        int[][] arr01 = new int[5][5];
        int num = 1;

        //배열 값 넣기
        for (int i = 0; i < arr01.length; i++) {
            for (int j = 0; j < arr01.length; j++) {
            arr01[i][j] = num++;
            }
        }

        // 출력 방법 (1)
        // arr01 배열을 is 배열에 하나씩 넣기
        for (int[] is : arr01) {
            // is를 i에 하나씩 넣기
            for (int i : is) {
            // 출력
            System.out.print(i + " ");
            }
        }

        // 출력 방법 (2)
        for (int[] is : arr01) {
            System.out.println(Arrays.toString(is));
        }
    }
}// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

 

 

03. 2차원 배열 활용하기

 

[ Q1. N자 만들기 ]

package jun09;

import java.util.Arrays;
import java.util.Scanner;

public class MultiArray {
	public static void main(String[] args) {
    
		int[][] arr01 = new int[7][7];
		/*
		 * [0,0,0,0,0,0,0] [0,0,0,0,0,0,0] [0,0,0,0,0,0,0] [0,0,0,0,0,0,0]
		 * [0,0,0,0,0,0,0] [0,0,0,0,0,0,0] [0,0,0,0,0,0,0]
		 */
		int num = 1;
		for (int i = 0; i < arr01.length; i++) {

			arr01[i][0] = num;
			arr01[i][6] = num;
			arr01[i][i] = num;

			System.out.println(Arrays.toString(arr01[i]));
		}
	}
}
// [1, 0, 0, 0, 0, 0, 1]
// [1, 1, 0, 0, 0, 0, 1]
// [1, 0, 1, 0, 0, 0, 1]
// [1, 0, 0, 1, 0, 0, 1]
// [1, 0, 0, 0, 1, 0, 1]
// [1, 0, 0, 0, 0, 1, 1]
// [1, 0, 0, 0, 0, 0, 1]

 

[ Q2. 입력받은 숫자 크기만큼 N자 만들기 ]

package jun09;

import java.util.Scanner;

public class MultiArray04 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("홀수 숫자를 입력하세요 : ");
		int num = sc.nextInt();

		char[][] nArt = new char[num][num];// num은 사용자로부터 입력받은 숫자

		for (int i = 0; i < nArt.length; i++) {
			for (int j = 0; j < nArt[i].length; j++) {
				if (i == j || j == 0 || j == nArt.length - 1) {
					nArt[i][j] = 'N';
				} else {
					nArt[i][j] = ' ';
				}
				System.out.print(nArt[i][j] + " ");
			}
			System.out.println("");
		}
		sc.close();
	}
}// 4를 입력했다면
// N     N 
// N N   N 
// N   N N 
// N     N

 

[ Q3. 3 x 3 1부터 9 채우기 ]

package jun09;

import java.util.Arrays;

public class MultiArray {
	public static void main(String[] args) {

		int s = 0;
		int[][] arr01 = new int[3][3];

		for (int i = 0; i < arr01.length; i++) {
			for (int j = 0; j < arr01.length; j++) {
				s = s + 1;
				arr01[i][j] = s;
			}
			System.out.println(Arrays.toString(arr01[i]));
		}
	}
}
// [1, 2, 3]
// [4, 5, 6]
// [7, 8, 9]

 

[ Q4. 3 x 3 배열 랜덤으로 중복 없이 1부터 9 채우기 ]

package jun09;

import java.util.Arrays;

public class Samsam{
	public static void main(String[] args) {
		
		int[][] sam = new int[3][3];
		
		//입력
		for (int i = 0; i < sam.length; i++) {
			for (int j = 0; j < sam[i].length; j++) {
				sam[i][j] = (int) (Math.random() * 9 + 1);
				
				if (sam[i][j] == sam[i][j]) {
					sam[i][j] = (int) (Math.random() * 9 + 1);
				}
			}
		}
		
		//출력
		for (int[] is : sam) {
			System.out.println(Arrays.toString(is));
			
		}
	}
}

 

[ Q5. 사용자에게 값 5개 받고 배열로 출력하기 ]

package jun09;

import java.util.Scanner;

public class Test01 {

	public static void main(String[] args) {
		
		//arr01 = 100;//이렇게 저장 안됨 (번지수가 필요함)
		
		int[] arr01 = new int[5];
		
		//사용자가 점수를 입력 하면 arr01에 저장하고 출력
		Scanner sc = new Scanner(System.in);
		
		for (int i = 0; i < arr01.length; i++) {//5개 입력 받기
			System.out.print("점수를 입력하세요 : ");
			arr01[i] = sc.nextInt();
		}
		
		// 출력 방법 (1)
		System.out.println(Arrays.toString(arr01));//[50, 20, 30, 50, 10]
		
		// 출력 방법 (2)
		for (int i = 0; i < arr01.length; i++) {
			System.out.println(arr01[i]);
		}
        // 50
        // 20
        // 30
        // 50
        // 10
		
		// 출력 방법 (3)
		for (int i : arr01) {
			System.out.println(i);
		}  System.out.println(arr01[i]); 위랑 같은 말임
        // 50
        // 20
        // 30
        // 50
        // 10
		
		//닫기
		sc.close();
		
	}
}

 

[ Q6. 로또 번호 45개 중에 6개 랜덤으로 뽑기 ]

package jun09;

public class Test {
	public static void main(String[] args) {

		int[] arr01 = new int[6];
		for (int i = 0; i < arr01.length; i++) {
			System.out.print((int) (Math.random() * 45) + 1);// 실행할 때마다 값이 계속 바뀜
			System.out.print("\n");
		}

		// 1~25중 하나만 뽑기
		System.out.println((int) (Math.random() * 25) + 1);

	}
}

 

 

참고자료
신용권, '혼자 공부하는 자바'
반응형