import java.util.Scanner;
public class MainMenu {
public MainMenu(){
int x = 1;
Scanner menuIn = new Scanner(System.in);
while ( x == 1 ){
String pick = "0";
System.out.println("--== Household Admin v1.0 ==--");
System.out.println("(A)dd Resident");
System.out.println("(R)emove Resident");
System.out.println("(L)ist Resident(s)");
System.out.println("pick = " + pick);
System.out.print("#: ");
pick = menuIn.nextLine();
System.out.println("pick = " + pick);
switch (pick) {
case "A":
case "a":
Resident.residentList.add( Resident.newResident() );
break;
case "R":
case "r":
break;
case "L":
case "l":
break;
case "Q":
case "q":
x = 0;
break;
default:
System.out.println("WRONG! Try again.");
break;
}
}
menuIn.close();
}
}
第一次通过循环一切都按预期工作。第二次循环我得到了:
线程中的异常" main" java.util.NoSuchElementException:找不到行 在java.util.Scanner.nextLine(Scanner.java:1540) 在家.MainMenu。(MainMenu.java:26) at household.MyFirstGame.main(MyFirstGame.java:7)
我不确定如何"重置"扫描仪对象,以便能够再次重复使用它。
答案 0 :(得分:0)
您的整个代码都在MainMenu
的构造函数中,您通过调用menuIn.close();
来关闭扫描程序,这是根本原因。
您似乎正在MainMenu
内的main
方法中创建MyFirstGame
的新实例。现在,如果您在scanner对象上调用.close()
,它将关闭基础流。因此,您的第一个对象成功创建。但是当您尝试实例化MainMenu
的第二个对象时,由于System.in
流已关闭,您会收到此异常。
理想情况下,您应该使用单个扫描仪对象来读取用户输入。不是每次都在构造函数中创建新的扫描程序对象,只需在main方法中创建一个扫描程序对象,并将其作为参数传递给构造函数。像下面的东西。
在MyFirstGame.main
Scanner menuIn = new Scanner(System.in);
MainMenu mainMenu1= new MainMenu(menuIn);
MainMenu mainMenu2= new MainMenu(menuIn);
//.... and So on
//and close scanner object here once you have created all reaquired object.
menuIn .close();
在MainMenu中将构造函数更改为
public MainMenu(Scanner menuIn ){
从构造函数中删除下面的行
//Scanner menuIn = new Scanner(System.in);
//menuIn.close();