无法使循环正常工作

时间:2015-11-06 04:15:09

标签: java

我正在尝试使用输入输入的计算器,如+ 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);
            }

}}}

4 个答案:

答案 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文件的顶部,以及其他导入。