JAVA 프로그래밍

문제

16장의 카드에서 같은 색을 가진 카드 짝을 찾는 문제입니다 이를 해결하는 프로그램을 작성하세요 
11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 11 두 번째 카드를 선택하세요: 24
12 13 14 21 22 23 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 13 두 번째 카드를 선택하세요: 12
14 21 22 23 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 54 두 번째 카드를 선택하세요: 36

11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 13 두 번째 카드를 선택하세요: 31
11 12 14 21 22 23 24 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 11 두 번째 카드를 선택하세요: 24
12 14 21 22 23 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 41 두 번째 카드를 선택하세요: 34
12 14 21 22 23 32 33 42 43 44
첫 번째 카드를 선택하세요: 64 두 번째 카드를 선택하세요: 17

11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 11 두 번째 카드를 선택하세요: 12
13 14 21 22 23 24 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 11 두 번째 카드를 선택하세요: 13
12 14 21 22 23 24 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 21 두 번째 카드를 선택하세요: 11
12 13 14 22 23 24 31 32 33 34 41 42 43 44
첫 번째 카드를 선택하세요: 10 두 번째 카드를 선택하세요: 03

알고리즘 설계

프로그램 시작 
   먼저 같은 색 카드 두 장을 맞추면 번호 대신 색깔을 출력하도록 설정
   카드 게임 현황 출력
      사용자가 선택한 카드이거나 이미 짝을 맞춘 카드는 색깔 출력
      아니면 11 - 44의 카드번호를 출력
   카드 두 장을 새로 선택
      새로 선택한 카드가 11 - 44 사이면 게임 계속 진행
프로그램 종료

프로그램 구현

     
 
 ※ 단계별 점검: A키(이전), D키(다음) 
 
	// 파일명 : ./Chapter10/CardMatching.java
	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++ ) {
					for( int subRow = 0; subRow < 3; subRow++ ) {
						for( int column = 0; column < output[0].length; column ++ ) {
							// 사용자가 선택한 카드이거나 이미 짝을 맞춘 카드는 색깔 출력  
							if( ( output[row ][column]<= 7 ) || ( output[row ][column]== card1 ) || ( output[row ][column]== card2 ) )
7								System.out.print( " \033[4" + color[row ][column]+ "m     \033[0m" );
							// 아니면 11 - 44의 카드번호를 출력 
							else if ( subRow == 1 )
8								System.out.print(" " + output[row ][column]+ " ");
							else
								System.out.print("    ");
						}
9						System.out.println();
					}
				}
		  
				// 카드 두 장을 새로 선택 
				System.out.print( "첫 번째 카드를 선택하세요: " );
				card1 = scan.nextInt();
				card1Row = card1 / 10 - 1;
10				card1Column = card1 % 10 - 1;
		  
				System.out.print( "두 번째 카드를 선택하세요: " );
				card2 = scan.nextInt();
				card2Row = card2 / 10 - 1;
11				card2Column = card2 % 10 - 1;
		  
			// 새로 선택한 카드가 11 - 44 사이면 게임 계속 진행 
12			} while( ( 0 <= card1Row ) && ( card1Row < 4 ) && ( 0 <= card1Column ) && ( card1Column < 4 )
			      && ( 0 <= card2Row ) && ( card2Row < 4 ) && ( 0 <= card2Column ) && ( card2Column < 4 ) );
			scan.close();
		// 프로그램 종료 
13		}
	}

실행 순서 확인