[Study #06] 2차원 배열

     

    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);
    
    	}
    }

     

     

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

    댓글