我正在尝试使用输入输入的计算器,如+ 5 5或/ 10 2.当我编译并运行它时,我收到此错误:
线程中的异常" main" java.util.NoSuchElementException
在java.util.Scanner.throwFor(Scanner.java:907)
在java.util.Scanner.next(Scanner.java:1416)
在calc.main(calc.java:11)
我的代码
import java.util.Scanner;
public class calc {
public static void main(String[] args) {
Scanner input = new Scanner( System.in );
String calc;
double num1;
double calcdu = 0.0;
double num2;
while ( true ) {
calc = input.next();
num1 = input.nextDouble();
num2 = input.nextDouble();
if (calc.equals("+"))
{
calcdu= num1 + num2;
System.out.printf("%.2e %s %.2e %c %.2e\n", num1, "+", num2, '=', calcdu);
}
if (calc.equals("/"))
{
calcdu=num1/num2;
System.out.printf("%.2e %s %.2e %c %.2e\n", num1, "/", num2, '=', calcdu);
}
if (calc.equals("-"))
{
calcdu=num1-num2;
System.out.printf("%.2e %s %.2e %c %.2e\n", num1, "-", num2, '=', calcdu);
}
if (calc.equals("*"))
{
calcdu=num1*num2;
System.out.printf("%.2e %s %.2e %c %.2e\n", num1, "*", num2, '=', calcdu);
}
if (calc.equals("%"))
{
calcdu=num1%num2;
System.out.printf("%.2e %s %.2e %c %.2e\n", num1, "%", num2, '=', calcdu);
}
}}}
答案 0 :(得分:1)
您在next()
上致电scanner
而未通过hasNext()
while(input.hasNext())
{
num1 = Double.parseDouble(input.nextDouble());
num2 = Double.parseDouble(input.nextDouble());
......//further code
答案 1 :(得分:1)
当scanner
中没有更多令牌时,会发生此异常,并且您尝试接下来,而不进行检查。请参阅Java文档中的NoSuchElementException。
在您的情况下,正如Ramanlfc
提到的那样,您在扫描程序上调用Next()
,而不检查next
是否存在。您可以使用hasNext()
检查下一个是否存在。
答案 2 :(得分:0)
当一个类试图获取一个元素或令牌并且那里没有任何元素或令牌时,会发生NoSuchElementException。例如,如果Scanner类试图从标准输入中获取下一个元素,那里没有任何内容(空或null)。如果用户没有输入任何内容或程序过早终止,则会发生这种情况。
您可以首先检查用户是否输入了某些内容,然后再继续使用您的程序。
对于Scanner类,可以使用hasNext()方法或其中的一些变体来完成。
您可以阅读更多相关信息here
举个例子:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String operator = "";
if (input.hasNext()) { // Check that Scanner has input
operator = input.next();
}
while (true) {
if (operator.isEmpty()) { // No value entered, program can't continue
System.out.println("No value entered, program will now exit.");
break;
}
}
}
答案 3 :(得分:0)
您收到错误,因为扫描程序中没有要获取的函数的标记。您应该使用Scanner.hasNext()
功能检查扫描仪中是否还有令牌。
还有一种更简单的方法可以使用JavaScript引擎根据用户输入进行计算,如下所示:
public static void main (String[] args) throws java.lang.Exception
{
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Scanner kbd = new Scanner(System.in);
String operator = kbd.next();
double number1 = kbd.nextDouble();
double number2 = kbd.nextDouble();
System.out.println(engine.eval(number1 + operator + number2));
}
为此,您需要将import javax.script.*;
添加到您的java文件的顶部,以及其他导入。