백엔드 과정/Java

Java 문제풀이 4-3. 이차원 배열로 랜덤 영문자 출력하기.

mim 2021. 12. 27. 18:12
반응형

 

문제
/* 가로와 세로 길이를 정수형으로 입력 받아 입력받은 가로 세로 길이를 이용하여

 * 이차원 배열을 할당하고 각 인덱스에는 랜덤으로 알파벳 대문자 넣어서 출력
 * 
 * 단, 가로 행 혹은 세로 열은 반드시 1~10 까지의 정수를 입력해야 하고 그렇지 않은 경우에는
 * "반드시 1~10까지의 정수를 입력해야 합니다. 다시 입력하세요." 출력 후 

 * 가로 행 또는 세로 열을 다시 입력받을 수 있도록 한다.
 * 
 * -- 입력 예시 -- 
 * 가로 행의 수를 입력하세요 : 5 
 * 세로 열의 수를 입력하세요 : 4
 * 
 * -- 출력 예시 -- 

 * F H Z G 
 * W F O T 
 * O R X V 
 * W H J X 
 * W S S J 
 */

 

작성한 코드)

while(true) {
	Scanner sc = new Scanner(System.in);
	System.out.print("가로 행의 수를 입력하세요 : ");
	int row = sc.nextInt();
	System.out.print("세로 열의 수를 입력하세요 : ");
	int column = sc.nextInt();
        
	/*입력받은 정수가 1~10 사이인지 판별*/
	if((row>=1 || row <= 10) && (column>=1 ||column <= 10)) {
				
	int[][] iarr = new int[row][column];

	/*반복문을 이용한 값 대입*/
	for (int i = 0; i < iarr.length; i++) {
		for (int j = 0; j < iarr[i].length; j++) {
                
		/*랜덤 대문자를 발생시키는 변수 선언*/
		char random = (char) ((Math.random() * 26) + 'A');
		iarr[i][j] += random;
		}
	}
	for (int i = 0; i < iarr.length; i++) {
	for (int j = 0; j < iarr[i].length; j++) {
	System.out.print((char) (iarr[i][j]) + " ");
	}System.out.println();
} 
break; //출력이 끝나면 종료
					
} else {System.out.println("반드시 1~10까지의 정수를 입력해야 합니다. 다시 입력하세요.");	
}

 

반복문을 무분별하게 사용한 아래 코드로 문제 풀이가 출력되는지 잘 작동하는지 확인 후 

위에 코드로 불필요한 조건문 부분을 수정하였다.

특히 while문 do-while문이 너무나 혼용되어 사용되고 있고.. 이 부분은 문제를 자주 풀어보면서 익숙해져야 할 것 같다.

 

	while (true) {
		Scanner sc = new Scanner(System.in);
		System.out.print("가로 행의 수를 입력하세요 : ");
		int row = sc.nextInt();
		System.out.print("세로 열의 수를 입력하세요 : ");
		int column = sc.nextInt();

do {
	/* 입력받은 정수가 1~10의 사이인지 확인 */
	if (row <= 10 && column <= 10) {
	int[][] iarr = new int[row][column];

	for (int i = 0; i < iarr.length; i++) {
		for (int j = 0; j < iarr[i].length; j++) {
               
		/* 랜덤 대문자 생성하여 배열에 값 대입 */
		char random = (char) ((Math.random() * 26) + 'A');
		iarr[i][j] += random;
		}
	}
	/* 반복문을 이용한 출력문 */
	for (int i = 0; i < iarr.length; i++) {
		for (int j = 0; j < iarr[i].length; j++) {
		System.out.print((char) (iarr[i][j]) + " ");
		}System.out.println();
	}
	return; //배열을 다 출력하고 나면 반복문을 종료한다.
					
	} else {
	System.out.println("반드시 1~10까지의 정수를 입력해야 합니다. 다시 입력하세요.");
	}
  } while (false);
}

 

아직까지도 반복문의 중첩 사용에서 헷갈리고 있다.... 

조건문 안에는 조건도 없고.. 스캐너로 입력받을 문구를 반복하기만을 위해 반복문을 썼을 뿐 ...

휴 더 깔끔하게 작성할 수 있도록 연습해야겠다.

 

반응형