본문 바로가기

국비과정/JAVA (기초)

20230609 _[6일차]_06. 2차원배열 + 랜덤숫자 요소채우기

[ 2차원배열  + 랜덤숫자 요소채우기]

 

( 배열의 index를 랜덤으로 추출 <-- 1~9까지 정수넣기 )

package jun09;

import java.util.Arrays;
import java.util.Iterator;

// 3X3 배열에 1~9 랜덤정수 입력하기 (중복없이)
public class Samsam {
	public static void main(String[] args) {

		int r1;
		int r2;
		int[][] arr = new int[3][3];
				
		for (int i = 1; i <= 9; i++) {
			r1 = (int) (Math.random() * 3); // 0 1 2
			r2 = (int) (Math.random() * 3); // 0 1 2
			if (arr[r1][r2] == 0) {		// 요소값이 초기값(0)이면
				arr[r1][r2] = i;	// 1~9 순서대로 넣기	
			} else {		// 요소값이 초기값(0)이 아니면 (이미 채워졌으면)
				i--;		// 다시 랜덤정수(인덱스)추출 (i에 대한 자리 다시정하기)
			}
		}
			
		// 출력 1)
		for (int[] is : arr) {
			for (int r : is) {
				System.out.print(r + " ");
			}
			System.out.println(" ");
		}

		// 출력 2)
		for (int j = 0; j < arr.length; j++) {
			for (int j2 = 0; j2 < arr[j].length; j2++) {
				System.out.print(arr[j][j2] + " ");
			}
			System.out.println(" ");
		}
				
	}		
}

(랜덤으로 1~9까지 채워짐)

8 4 6  
9 1 3  
7 5 2

8 4 6  
9 1 3  
7 5 2

( 배열의 요소값을 랜덤으로 추출 --> 각 요소값들 같은지 검토 & 재추출 )

		int[][] arr = new int[3][3];
		boolean check = false;
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = (int) (Math.random() * 9) + 1;	// 랜덤정수(요소값)출력
				if(i + j != 0) {	// 중복검사시작
					for (int x = 0; x < arr.length; x++) {
						for (int y = 0; y < arr[x].length; y++) {
							if(arr[i][j] == arr[x][y] && !(i == x && j == y)) {
								check = true;	
							}	// 요소값 같으나, 자리가 다르면 재검사 필요
						}
					}
					if (check) {
						j--;	// 재검사
						check = false;
					}
				}
			}
		}	// 요소값 같고, 자리도 같으면 탈출!
		
		// 출력
		for (int[] is : arr) {
			for (int i : is) {
				System.out.print(i + " ");
			}
			System.out.println(" ");
		}

(필요한 값들을 1차원배열로 생성 --> 2차원 배열의 요소로 하나씩 넣어줌)

		int[] arr = new int[9];
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) ( (Math.random() * 9) + 1);
			for (int j = 0; j < i; j++) {
				if (arr[i] == arr[j]) {
					i--;
				}
			}
		}
		
//		System.out.println(Arrays.toString(arr));
//		1~9까지 랜덤정수로(중복x) 이루어진 1차원배열 생성
		
		int num = 0;
		int[][] arr2 = new int[3][3];
		for (int i = 0; i < arr2.length; i++) {
			for (int j = 0; j < arr2.length; j++) {
				arr2[i][j] = arr[num++];	
			}					
		}
		// 위에서 생성한 1차원배열(arr) 요소값들을
		// 2차원배열(arr2)의 요소값으로 하나씩 넣어줌