Java를 활용한 숫자 야구 게임을 만들던 도중
정답을 맞추고 나면 종료와 재시작을 선택할 수 있도록 하는 로직을 작성
하지만 정답을 맞춘 후 사용자의 입력을 받지 않고 Exception in thread "main" java.util.NoSuchElementException 오류가 발생하는 것을 알게되었고 해당 오류가 발생하는 원인을 찾아보던 중
public void play() {
Scanner sc = new Scanner(System.in);
System.out.println();
System.out.println("< 게임을 시작합니다. >");
while (true) {
List<String> inputNumberList;
Set<String> inputNumberSet = new LinkedHashSet<>();
while (true) {
System.out.println();
System.out.println("숫자를 입력하세요.");
inputNumberSet.clear();
String inputNumbers = sc.next();
if(inputNumbers.length() != 3){
System.out.println("세자리 수만 입력 가능합니다.");
continue;
}
생략
}
}
sc.close();
}
}
play()메서드에서 Scanner를 닫아 이후에 main 메서드에서 이미 닫힌 스트림을 참조하게 되어 NoSuchElementException이 발생한다는 것을 알게되었다.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/**
* 사용자가 선택할 수 있는 옵션을 출력합니다.
* 사용자가 게임 실행과 종료를 선택할 수 있도록 합니다.
*/
while(true) {
System.out.println("환영합니다! 원하시는 번호를 입력해주세요");
System.out.println("1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기");
int choice = sc.nextInt();
if (choice == 1) {
while (true){
GameLogic gamelogic = new GameLogic();
gamelogic.play();
System.out.println("종료하고싶으면 'no'를, 계속 진행하시려면 아무 키나 입력해주세요.");
String replay = sc.next();
if("no".equals(replay)){
break;
}
}
break;
}else if (choice == 2) {
System.out.println("해당 기능을 준비중입니다.");
}else if (choice == 3) {
System.out.println("게임을 종료합니다.");
break;
}else {
System.out.println("1, 2, 3 중에 선택하세요.");
}
}
sc.close();
}
}
Scanner를 main 메서드 끝에서만 닫아 입력을 받을 수 있도록 수정하였다.
'내배캠' 카테고리의 다른 글
| 팀 프로젝트 트러블슈팅 - 뉴스피드 프로젝트 (0) | 2024.11.21 |
|---|---|
| 개인과제 트러블슈팅 - 일정 관리 앱 Develop (0) | 2024.11.15 |
| 개인과제 트러블슈팅 - 일정 관리 앱 (0) | 2024.11.08 |
| 개인과제 트러블슈팅 - 계산기 (0) | 2024.10.17 |
| 팀 프로젝트 KTP 개인 회고 (0) | 2024.10.07 |