我有一个关于Java中使用next.Line的扫描程序代码的问题。它适用于我的一个代码,但不适用于另一个代码

时间:2019-11-03 07:45:39

标签: java java.util.scanner

我试图创建一个计算器,在该计算器中,我提示用户输入第一个数字,然后提示输入字符串的运算符,最后提示用户输入第二个数字。当我为第一个提示输入值时,最后一个提示与操作员提示一起出现,当我输入操作员时,将导致错误。

System.out.print("Enter the your first number: ");
double x = calculator.nextDouble();
System.out.print("Enter the operator: ");
String y = calculator.nextLine();
System.out.print("Enter the your second number: ");
double z = calculator.nextDouble(); 

这是我运行程序时得到的:

Enter the your first number: 5
Enter the operator: Enter the your second number: +
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at 
Flow_Of_Control.Calculator_4_function_sc_statement.main(Calculator_4_function_sc_statement.java:37) 

当我使用'.next()'时它可以正常工作,但是我想知道为什么它不能与.nextLine()一起工作,因为下面的代码可以与.nextline()一起工作,而 上面的代码没有。

    System.out.print("Enter your name: ");
    String name = keyboardInput.nextLine();
    System.out.print("Enter your Age: ");    
    int age = keyboardInput.nextInt();   

1 个答案:

答案 0 :(得分:2)

nextDouble()不会从控制台读取换行符,而是由calculator.nextLine();读取。您可以在输出中看到它

  

输入接线员:输入您的第二个数字:+

您将运算符插入Enter the your second number:请求中,因此它被nextDouble()读取。

一种解决方法是在致电nextLine()之后致电nextDouble()

System.out.print("Enter the your first number: ");
double x = calculator.nextDouble();
calculator.nextLine();
System.out.print("Enter the operator: ");
String y = calculator.nextLine();

您也可以始终使用nextLine()并将其转换为正确的类型

System.out.print("Enter the your first number: ");
double x = Double.parseDouble(calculator.nextLine());