카테고리 없음

Java 문제풀이. 야구게임. 랜덤한 숫자 맞추기 !

mim 2022. 1. 4. 19:53
반응형

문제

/*
 * 숫자 야구게임 만들기 길이 4의 정수 배열을 만들고 각 인덱스에는 0 ~ 9까지의 중복되지 않는 난수를 저장한다. 

 * 4자리 숫자를 입력받아
 * 스트라이크, 볼 등의 힌트를 주며 4자리 난수 숫자를 맞추는 게임이다. 

 * 숫자와 자리가 모두 맞는 경우 스트라이크, 숫자는 맞지만 자리는
 * 맞지 않는 경우는 볼 이다. 예) 9183 으로 난수가 발생하면 9356 입력 시 1S 1B이다.
 * 
 * 단, 기회는 총 10번이며, 10번 이내에 맞추는 경우 "정답입니다." 출력 후 게임 종료 10번의 기회가 모두 소진 되면
 * "10번의 기회를 모두 소진하셨습니다. 프로그램을 종료합니다." 출력 후 종료
 * 
 * 또한 4자리의 정수를 입력하지 않은 경우에는 "4자리의 정수를 입력해야 합니다." 출력 후 입력을 다시 받을 수 있되 횟수는 차감하지
 * 않는다.
 * 
 * -- 프로그램 예시 (난수 7416 의 경우) --
 *
 * 10회 남으셨습니다. 4자리 숫자를 입력하세요 : 1234 아쉽네요 0S 2B 입니다. 9회 남으셨습니다. 4자리 숫자를 입력하세요 :
 * 5678 아쉽네요 0S 2B 입니다. 8회 남으셨습니다. 4자리 숫자를 입력하세요 : 7416 정답입니다.
 */

 

작성한 코드)

public class Application {

	public static void main(String[] args) {
    
		Scanner sc = new Scanner(System.in);
		
		int[] random = new int[4];

		/*랜덤 숫자 발생*/
		for (int i = 0; i < 4 ; i++) {
			random[i] = (int)(Math.random() * 10);
			for (int j = 0; j < i; j++) {
				if (random[i] == random[j]) {
					i--;
				}
			}
		}
		System.out.print("실행확인용 random 값 : ");
		for(int i : random) {
		System.out.print(i);}
		System.out.println();
		
		int tryNum = 10;	//시도횟수
		int s = 0;			//스트라이크
		int b = 0;			//볼
		
	while(true) {
		System.out.println(tryNum + "회 남으셨습니다.");
		System.out.print("4자리의 정수를 입력하세요 : ");
		String str = sc.nextLine();
		
		
		/*4자리 정수인지 확인*/
		if(str.length() != 4) {
			System.out.println("4자리의 정수를 입력해야 합니다.");
			continue;
		}
			
			/*입력한 값을 배열에 저장 */
			
			int[] answer = new int[4];
			
			for (int i = 0; i < 4; i++) {
				char ch = str.charAt(i); // 문자열을 문자로
				answer[i] = ch - 48; 
                // 문자를 배열에 값저장 유니코드 int로 값 변환하려면 -48 하기!
			}
				
			/*스트라이크 확인*/
			for (int i = 0; i < 4; i++) {
				if (answer[i] == random[i]) {
					s++; //스트라이크
					b--; // 볼 중복제거
				}
				/*정답인 경우*/
				if(s==4) {
					System.out.println("정답입니다.");
					return;
				}
		
			}
			/*볼 확인*/
			for (int i = 0; i < 4; i++) {
				for (int j = 0; j < 4; j++) {
					if (answer[i] == random[j]) {
						b++; //볼
					}
				}
			}

			/*정답이 아닌 경우*/
			if(s!=4) {
				System.out.println("아쉽네요 " + s + "S, " + b + "B 입니다.");
				
				tryNum--;	// 시도횟수 -1회
				s = 0;		// 스트라이크 개수 초기화
				b = 0;		// 볼 개수 초기화
				
					/*시도 횟수가 0번이 되면 게임 종료*/
					if (tryNum==0) {
				System.out.println("10번의 기회를 모두 소진하셨습니다. 프로그램을 종료합니다.");
					break;}
				}
			}
		}
	}

 

되게 재밌게 푼 문제 ㅎ

반응형