문제에서 제시하는 조건은 자리수를 설정한 이후 자동으로 게임이 시작되는 것이었으나 아래 결과와 같이 다시 원하는 번호로 이동되는 원치 않는 과정이 발생 하였다.

public class Main {
public static void main(String[] args) throws IOException {
Scanner sc;
int digits = 3; // 디폴트 3
List<Integer> try_count = new ArrayList<>();
while (true) {
System.out.println("환영합니다! 원하시는 번호를 입력해주세요");
System.out.println("0. 자리수 설정 1.게임 시작하기 2. 게임 기록 보기 3. 종료하기");
sc = new Scanner(System.in);
int menu = sc.nextInt();
if (menu == 0) {
while (true) {
try {
System.out.println("설정하고자 하는 자리수를 입력하세요");
digits = sc.nextInt();
if (digits >= 3 && digits <= 5) {
System.out.println(digits + "자리수 난이도로 설정되었습니다.\n");
break;
}
System.out.println("3이상 5이하의 정수를 입력하세요\n");
}catch (InputMismatchException e){
System.out.println("올바른 형태의 정수를 입력해주세요\n");
sc.nextLine();
}
}
}
else if (menu == 1) {
System.out.println("< 게임을 시작합니다 >");
GamePlay gp = new GamePlay(digits);
try_count.add(gp.play());
} else if (menu == 2) {
BaseballGameDisplay.displayHistory(try_count);
} else if (menu == 3) {
System.out.println("숫자 야구를 모두 종료합니다.");
break;
} else {
System.out.println("올바른 숫자를 입력해주세요!\n");
}
}
}
}
0을 입력 받은 경우 while문을 들어가서 올바른 값이 입력 될 때 까지 계속 입력 하도록 유도 하는 것 까지는 좋았으나 올바른 값을 입력 받고
게임이 시작즉 menu 1번으로 가도록 하고 싶었다.
=> 처음에는 전체적인 메뉴 입력 판 전체의 구조를 바꿀까 생각을 해보았다. 하지만 그러기 전에 좀더 간단한 방법이 있을 지 생각을 해보았고 고민 끝에 아래 방법을 생각해 보았다.
if (menu == 0) {
while (true) {
try {
System.out.println("설정하고자 하는 자리수를 입력하세요");
digits = sc.nextInt();
if (digits >= 3 && digits <= 5) {
System.out.println(digits + "자리수 난이도로 설정되었습니다.\n");
menu = 1; // menu 변수를 1로 변경함
break;
}
System.out.println("3이상 5이하의 정수를 입력하세요\n");
}catch (InputMismatchException e){
System.out.println("올바른 형태의 정수를 입력해주세요\n");
sc.nextLine();
}
}
}
if (menu == 1) {
System.out.println("< 게임을 시작합니다 >");
GamePlay gp = new GamePlay(digits);
try_count.add(gp.play());
}
}
(주석 참고) 올바른 자릿수가 입력이 되면
menu변수를 1로 바꿔서 다음 메뉴로 자동으로 넘어가도록 설계하였다.
이때 menu==1 인 조건을 if문으로 설계하였는데
만약에 else-if 문으로 설계한다면 어떻게 될까?
일단 결론 부터 말하자면 실행 결과는 동일 했다.
하지만 구조상으로나 로직적으로나 else if 보다는 if 를 쓰는 것이 맞는 것 같다.
그 이유는 else if 의 경우 이전 if 문과 연결되어서 동작 하지 않을 수 있지만
if 의 경우는 서로 분리된 if 문 이기 때문에 menu==0 을 따지고
업데이트 된 menu==1의 조건을 가지눈 if 문을 수행 할 수 있는 것이다.
변경된 실행 결과 :

(정상적으로 자리수 설정 후 바로 자리수가 입력되도록 유도되는 것을 볼 수 있음)