我试图创建一个计算器,在该计算器中,我提示用户输入第一个数字,然后提示输入字符串的运算符,最后提示用户输入第二个数字。当我为第一个提示输入值时,最后一个提示与操作员提示一起出现,当我输入操作员时,将导致错误。
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();
答案 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());