我正在研究Java类,并且试图创建一个代码,用户在其中输入他们想要创建多少个对象(在本例中为“多维数据集”)。
在我的主班我写了这段代码
System.out.println("Enter the amount of objects you want to create");
Scanner objNumInput = new Scanner(System.in);
int objNum = objNumInput.nextInt();
objNumInput.close();
Cube cubes[] = new Cube[objNum];
for (int i = 0; i < objNum; i++){
String cubeName = Cube.inputName();
double cubeLength = Cube.inputLength();
cubes[i] = new Cube(cubeName, cubeLength);
}
在我的Cube课堂上,我在这里:
public static String inputName(){
String cubeName;
Scanner input = new Scanner(System.in);
System.out.println("Enter the name: ");
cubeName = input.nextLine();
return cubeName;
}
public static double inputLength(){
double cubeLength;
Scanner input = new Scanner(System.in);
System.out.println("Enter the length: ");
cubeLength = input.nextDouble();
return cubeLength;
}
运行它时,我可以输入要创建的“立方体”的数量。然后,它不断抛出异常
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at Cube.inputName(Cube.java:40)
at Main.main(Main.java:88)
怎么了?
答案 0 :(得分:1)
请勿关闭您的Scanner
,它也会关闭System.in
。
关闭扫描器后,如果扫描器实现了Closeable接口,它将关闭其输入源
据我了解(如果我错了,请纠正我)关闭objNumInput
的原因是您想以两种不同的方法使用它。
我建议您将Scanner
作为输入参数传递到方法inputName
和inputLength
中。然后,您将能够重复使用同一台扫描仪而无需在两者之间关闭它。
public static String inputName(Scanner scanner){
String cubeName;
System.out.println("Enter the name: ");
cubeName = scanner.nextLine();
return cubeName;
}
public static double inputLength(Scanner scanner){
double cubeLength;
System.out.println("Enter the length: ");
cubeLength = scanner.nextDouble();
return cubeLength;
}
...
System.out.println("Enter the amount of objects you want to create");
Scanner objNumInput = new Scanner(System.in);
int objNum = objNumInput.nextInt();
//objNumInput.close(); <-- Do not close the scanner
Cube cubes[] = new Cube[objNum];
for (int i = 0; i < objNum; i++){
String cubeName = Cube.inputName(objNumInput);
double cubeLength = Cube.inputLength(objNumInput);
cubes[i] = new Cube(cubeName, cubeLength);
}
答案 1 :(得分:0)
放入objNumInput.close();在您的main方法中执行for循环之后。之所以闪烁程序而无需第二次暂停是因为在执行objNumInput.close()时System.in已关闭;在主要方法的第3行