본문 바로가기

Programming/Java

명품 java programming open challenging : 카드 번호 맞추기 게임

반응형

숨겨진 카드의 수를 맞추는 게임을 만들어 보겠다. 

1) 0부터 99까지의 임의의 수를 가진 카드를 한 장 숨기고 이 카드의 수를 맞추는 게임이다.

2) 숨겨진 임의의 수는 random 클래스를 이용하여 정수로 생성된다.

3) 수를 맞추는 사람이 생성된 정수보다 작은 수를 입력한다면, 프로그램은 '더 낮게'를 출력하고, 그 반대라면 '더 높게'를 출력하며 범위를 좁혀가면서 수를 맞추게끔 한다. 

4) 게임을 반복하기 위해 y/n을 묻고 n인 경우 종료된다.



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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.util.Scanner;
import java.util.Random;
 
public class Cardgame{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        while(true) {
            Random r = new Random();
            int k = r.nextInt(100); // Random class로 0-99까지의 임의의 정수를 생성한다.
            System.out.println("수를 결정하였습니다. 맞추어보세요");
            System.out.println("0-99");
            int i = 1;
            while(true) { //사용자가 마지막에 'n'을 입력하기 전까지 반복 실행.
                
                System.out.println(i + ">>");
                int input = scanner .nextInt();

                while(input != k) { //사용자가 정답을 맞추지 못했다면
                    if(input<k) //사용자가 입력한 수 < 임의의 정수(정답) 
                        System.out.println("더 크게");
                    else if(input>k) //사용자가 입력한 수 > 임의의 정수(정답)
                        System.out.println("더 작게");
                    i++;
                    break; //while(input!=k)를 빠져나가는 break문
                }

                if(input==k) { //사용자가 정답을 맞췄다면
                    System.out.println("맞았습니다.");
                    System.out.println("다시하시겠습니까? (y/n) >>");

                    if(scanner.next().equals("n")) { //프로그램 종료 코드
                        System.out.println("숫자 맞추기를 종료합니다.");
                        System.exit(0);
                    }
                    else //계속 게임을 한다면
                        break; //여기서 break가 와야 하는 이유는 
//이 작은 반복문(if(input==k))을 벗어나서 계속 게임(while true문)을 진행해야 하기 때문이다.
                    
                    
                }
                
            
            
            
            
                }
        }
 
}
}
 

 cs


이 코드를 작성하여 문제를 푸는 목적은,

반복문과 break continue문의 제대로 된 이해를 돕는 데에 있는 것 같다.


코드를 손질하기 전에는, 이론에 충실하기 위해 continue문을 이곳 저곳 끼워넣었지만, 코드 정리를 하며

continue문이 결과적으로는, 다음 반복 cycle 수행 (이를테면, for문에서 바로 i++로 건너뛰기 하는 것) 을 위한 코드이기 때문에

continue를 작성할 자리 아래에 코드가 더이상 없다면, 쓰지않아도 결과에는 영향을 주지 않는 것을 눈치챘다.

또한 반복문을 구성할 때 break문은 해당 반복을 감싸고 있는 가장 작은 반복문을 빠져나가는 코드임을 고려하며 코딩해야겠다고 느꼈다.


아직 java 공부를 시작하고 있는 단계이기 때문에 조금 틀린 리뷰가 있을지라도 

차차 공부해가며 수정해나가고싶다.

반응형