문제점:
난이도 조절 기능을 추가하면서, 사용자가 자릿수를 설정한 후 자동으로 게임이 시작되도록 구현하고자 했었다. 처음에는 choice = 1
로 설정하여 case 1
로 이동하게 하려고 했으나, 코드를 확인해보니 switch
문에서 case 0
에 break
가 없어서 자릿수 설정이 끝나면 자동으로 case 1
로 이어지는 흐름이었다.
해결 방법:
자릿수 설정 후 자동으로 게임이 시작되도록 하려면 굳이 choice = 1
로 설정할 필요가 없었고, break
없이 case 1
로 이어지도록 코드를 유지하면 됐다. 이를 통해 자릿수 설정 후 자동으로 게임이 시작되도록 처리했다.
case 0:
System.out.println("설정하고자 하는 자리수를 입력하세요. (3, 4, 5)");
int newDigitLength = sc.nextInt();
if (newDigitLength == 3 || newDigitLength == 4 || newDigitLength == 5) {
digitLength = newDigitLength;
System.out.println(digitLength + "자리 난이도로 설정되었습니다.");
} else {
System.out.println("잘못된 자릿수입니다. 3, 4, 5 중에서 선택하세요.");
continue; // 잘못된 자릿수 입력 시 다시 반복
}
// break가 없으므로 자동으로 case 1로 이동
case 1:
int attempts = game.play(digitLength); // 설정된 자릿수로 게임 시작
gameCount++; // 게임 횟수 증가
gameRecords.add(attempts); // 게임 기록 저장
break;
문제점:
게임 난이도를 조절할 때, 3자리, 4자리, 5자리 숫자를 설정할 수 있기 때문에, 자릿수에 맞는 입력을 검증해야 했다. 처음에는 3자리만 고정해서 처리했지만, 이를 난이도에 맞춰 동적으로 처리할 필요가 있었다.
해결 방법:
validateInput
메서드에 자릿수를 파라미터로 받아 입력값이 설정된 자릿수에 맞는지 검증하도록 로직을 수정했다. 이를 통해 자릿수에 맞는 입력만 받아들일 수 있도록 처리했다.
protected String validateInput(int input, List<Integer> inputList, int digitLength) {
inputList.clear(); // 기존 입력값 초기화
int min = (int) Math.pow(10, digitLength - 1); // 자릿수에 따른 최소값
int max = (int) Math.pow(10, digitLength) - 1; // 자릿수에 따른 최대값
if (input < min || input > max) {
return "자릿수x"; // 자릿수 오류 메시지 반환
}
for (int i = digitLength - 1; i >= 0; i--) {
inputList.add(input / (int) Math.pow(10, i) % 10);
}
if (new HashSet<>(inputList).size() < digitLength) {
return "중복"; // 중복된 숫자가 있는 경우 처리
}
return "정상"; // 입력값이 정상적인 경우
}
이로써 숫자 야구 게임 Lv4까지 완성되었으며, 게임의 흐름과 구조가 한층 더 안정적이고 직관적으로 개선되었다. 🎉