JAVA 프로그래밍

문제

16장의 카드에서 같은 색을 가진 카드 짝을 찾는 문제입니다 이를 해결하는 프로그램의 다음 실행상태에 대해 빈칸을 채우세요 

프로그램의 실행순서 및 실행상태

1  public static void main( String[] args ) {  

2   int card1 = -1, card2 = -1, card1Row = -1, card1Column = -1, card2Row = -1, card2Column = -1;

3   do {
                                                
      ... 

첫번째 카드를 선택하세요: 11

12    card1Column = card1 % 10 - 1;

두번째 카드를 선택하세요: 24

13    card2Column = card2 % 10 - 1;

14   } while( ( 0 <= card1Row ) && ( card1Row < 4 ) && ( 0 <= card1Column ) && ( card1Column < 4 )

3   do {

4    if( ( card1 != card2 ) && ( color[card1Row][card1Column] == color[card2Row][card2Column] ) ) {

5     output[card2Row][card2Column] = color[card2Row][card2Column];

6    for( int row = 0; row < output.length; row++ ) {

7     for( int column = 0; column < output[0].length; column ++ ) {
   main()
      card1  11        card2  24 
   card1Row    card2Row
card1Column card2Column
        row  0        column  0 
  output[0] 11 12 13 14
        [1] 21 22 23 24
        [2] 31 32 33 34
        [3] 41 42 43 44
   color[0] 0 1 2 7
        [1] 3 5 6 0
        [2] 2 4 6 3
        [3] 4 5 1 7
                  [0]         [1]         [2]         [3]    

8      if( ( output[row][column] <= 7 ) || ( output[row][column] == card1 ) || ( output[row][column] == card2 ) ) {

9       System.out.print( " \033[" + (row*3+2) + ";" + (column*4+1) + "f    " );
■■ 
■■
■■

7     for( int column = 0; column < output[0].length; column ++ ) {

8      if( ( output[row][column] <= 7 ) || ( output[row][column] == card1 ) || ( output[row][column] == card2 ) ) {

10      else {

11       System.out.print( " \033[" + (row*3+2) + ";" + (column*4+1) + "f " + (row+1) + (column+1) + " " );
■■ 
■■ 12
■■
 
 ...                                                  

첫번째 카드를 선택하세요: 13

12    card1Column = card1 % 10 - 1;

두번째 카드를 선택하세요: 12

13    card2Column = card2 % 10 - 1;
   main()
      card1  13   card2  12 
   card1Row     card2Row
card1Column  card2Column
                                                                    

14   } while( ( 0 <= card1Row ) && ( card1Row < 4 ) && ( 0 <= card1Column ) && ( card1Column < 4 )

3   do {

4    if( ( card1 != card2 ) && ( color[card1Row][card1Column] == color[card2Row][card2Column] ) ) {

6    for( int row = 0; row < output.length; row++ ) {

7     for( int column = 0; column < output[0].length; column ++ ) {

8      if( ( output[row][column] <= 7 ) || ( output[row][column] == card1 ) || ( output[row][column] == card2 ) ) {

9       System.out.print( " \033[" + (row*3+2) + ";" + (column*4+1) + "f    " );
■■     
■■
■■

7     for( int column = 0; column < output[0].length; column ++ ) {

8      if( ( output[row][column] <= 7 ) || ( output[row][column] == card1 ) || ( output[row][column] == card2 ) ) {

9       System.out.print( " \033[" + (row*3+2) + ";" + (column*4+1) + "f    " );
■■■■   
■■■■
■■■■

7     for( int column = 0; column < output[0].length; column ++ ) {
 
 ...                                                  

첫번째 카드를 선택하세요: 54

12    card1Column = card1 % 10 - 1;

두번째 카드를 선택하세요: 36

13    card2Column = card2 % 10 - 1;

14   } while( ( 0 <= card1Row ) && ( card1Row < 4 ) && ( 0 <= card1Column ) && ( card1Column < 4 )

15  }


프로그램 코드

	import java.util.Scanner;
		
	public class CardMatching
	{
1		public static void main( String[] args ) { 	
			Scanner scan = new Scanner( System.in );			
			int[][] output = { { 11, 12, 13, 14 }, 
			                   { 21, 22, 23, 24 }, 
			                   { 31, 32, 33, 34 }, 
			                   { 41, 42, 43, 44 } };
			int[][] color = { { 0, 1, 2, 7 }, 
			                  { 3, 5, 6, 0 }, 
			                  { 2, 4, 6, 3 }, 
			                  { 4, 5, 1, 7 } };
2			int card1 = -1, card2 = -1, card1Row = -1, card1Column = -1, card2Row = -1, card2Column = -1;
						
3			do {
4				if( ( card1 != card2 ) && ( color[card1Row][card1Column] == color[card2Row][card2Column] ) ) {
					output[card1Row][card1Column] = color[card1Row][card1Column];
5					output[card2Row][card2Column] = color[card2Row][card2Column];
				}
				
6				for( int row = 0; row < output.length; row++ ) {
7					for( int column = 0; column < output[0].length; column ++ ) {
8						if( ( output[row][column] <= 7 ) || ( output[row][column] == card1 ) || ( output[row][column] == card2 ) ) {
							System.out.print( " \033[4" + color[row][column] + "m" );
							System.out.print( " \033[" + (row*3+1) + ";" + (column*4+1) + "f    " );
9							System.out.print( " \033[" + (row*3+2) + ";" + (column*4+1) + "f    " );
							System.out.print( " \033[" + (row*3+3) + ";" + (column*4+1) + "f    " );
							System.out.print( " \033[0m" );																				
						}
10						else {
							System.out.print( " \033[" + (row*3+1) + ";" + (column*4+1) + "f    " );
11							System.out.print( " \033[" + (row*3+2) + ";" + (column*4+1) + "f " + (row+1) + (column+1) + " " );
							System.out.print( " \033[" + (row*3+3) + ";" + (column*4+1) + "f    " );
						}
					}
				}
					
				System.out.print( " \033[15;1f \033[2K첫번째 카드를 선택하세요: " );			
				card1 = scan.nextInt();
				card1Row = card1 / 10 - 1;
12				card1Column = card1 % 10 - 1;
		
				System.out.print( " \033[16;1f \033[2K두번째 카드를 선택하세요: " );			
				card2 = scan.nextInt();
				card2Row = card2 / 10 - 1;
13				card2Column = card2 % 10 - 1;
		
14			} while( ( 0 <= card1Row ) && ( card1Row < 4 ) && ( 0 <= card1Column ) && ( card1Column < 4 )
			      && ( 0 <= card2Row ) && ( card2Row < 4 ) && ( 0 <= card2Column ) && ( card2Column < 4 ) );
			scan.close();
15		}
	}