Scanner input = new Scanner(System.in);
int command = 0;
boolean mainbool = true;
while (mainbool){
System.out.println("Enter in a command code. For a list of commands, type \"100\" and press \"Enter\".");
if (input.hasNextInt()){
command = input.nextInt();
}
input.nextLine();
switch (command){
case 1:
addition();
break;
case 2:
subtraction();
break;
case 3:
multiplication();
break;
case 4:
division();
break;
case 100:
System.out.println("1 Addition\n2 Subtraction\n3 Multiplication\n4 Division");
break;
default: System.out.println("You didn't type in one of the options correctly.");
}
}
input.close();
此程序中抛出的异常是: "线程中的异常" main"输入命令代码。对于命令列表,>键入" 100"然后按"输入"。 java.util.NoSuchElementException:找不到行 在java.util.Scanner.nextLine(未知来源) 在SimpleCalculator.main(SimpleCalculator.java:177)"
这只是我为学校制作的一个超级简单的程序。我意识到扫描程序已经没用了,但是为了这个程序的目的,我需要它循环返回并以与第一次运行此代码时相同的方式运行。这意味着(根据我读过的其他帖子)我需要为扫描仪创建一个新行来运行。有关如何的任何想法?
答案 0 :(得分:-1)
因为System.in
永远不会关闭,直到你关闭它或发生奇怪的事情(我从未在程序结束前看到它关闭),你只需要重新考虑你的控制流程。
首先,使用Scanner#next<anything but line>
会导致意外行为,因为换行字符不会被读取。因此,你应该考虑做这样的事情
int option = Integer.parseInt(scanner.nextLine());
其次,请记住Scanner#nextLine
将阻止线程,直到给出输入。这意味着您不需要检查是否有输入。对于像这样的简单控制台应用程序,您应该能够假设始终给出输入。
考虑到这一点,您可以像这样重写代码:
Scanner input = new Scanner(System.in);
while(true) {
System.out.println("Enter in a command code. For a list of commands, type \"100\" and press \"Enter\".");
int command = Integer.parseInt(input.nextLine());
switch (command) {
case 1:
addition();
break;
case 2:
subtraction();
break;
case 3:
multiplication();
break;
case 4:
division();
break;
case 100:
System.out.println("1 Addition\n2 Subtraction\n3 Multiplication\n4 Division");
break;
default:
System.out.println("You didn't type in one of the options correctly.");
}
}
input.close();
您需要添加一些内容以确保while(true)
将在某个时候退出。也许让选项5
退出?