Java 将p键入双精度时出错?

Java 将p键入双精度时出错?,java,Java,当扫描仪提示输入操作员(例如1、2、3或4)时,在扫描仪中键入p时,我收到一条错误消息。代码的其余部分都会通过,但我想知道如何才能到达您可以输入的位置,例如,一个p,并循环返回到它,提示您输入正确的运算符 import java.util.Scanner; public class charlespeppersprog5 { public static void main(String[] args) { Scanner operand = new Scanne

当扫描仪提示输入操作员(例如1、2、3或4)时,在扫描仪中键入p时,我收到一条错误消息。代码的其余部分都会通过,但我想知道如何才能到达您可以输入的位置,例如,一个p,并循环返回到它,提示您输入正确的运算符

import java.util.Scanner;
public class charlespeppersprog5 {

    public static void main(String[] args)
    {
        Scanner operand = new Scanner (System.in);
        double leftOperand = 0;
        double rightOperand = 0;
        double operator = 0;
        double finalAnswer = 0;

        System.out.println("-----------------------------------------");
        System.out.println("");

        System.out.print("Enter the left operand : ");
        leftOperand = operand.nextDouble();
        System.out.print("Enter the right operand : ");
        rightOperand = operand.nextDouble();

        System.out.println("");
        System.out.println("-----------------------------------------");
        System.out.println("");

        System.out.println("\t 1 -> Multiplication");
        System.out.println("\t 2 -> Division");
        System.out.println("\t 3 -> Addition");
        System.out.println("\t 4 -> Subtraction");

        System.out.println("");
        System.out.println("-----------------------------------------");
        System.out.println("");

        System.out.print("Choose an operator from the above menu : ");
        operator = operand.nextDouble();
            while (operator!=1 && operator!=2 && operator!=3 && operator!=4)
            {
            System.out.print("Choose an operator from the above menu : ");
                operator = operand.nextDouble();
            }
在此处输入代码
//就在这里,如果除了
在此处输入代码
1,2,3,4之外,还输入了任何代码,则示例要求再次循环。所以输入p,你就会得到这个消息
在此处输入代码
//线程“main”java.util.InputMismatchException中的异常 位于java.util.Scanner.throwFor(未知源) 位于java.util.Scanner.next(未知源) 位于java.util.Scanner.nextDouble(未知源) 位于charlespeppersprog5.main(charlespeppersprog5.java:35)


这是因为它期望一个双精度,并得到其他东西。先检查一下双人间

while (!operand.hasNextDouble()) {
    System.out.println("Please enter 1 - 4");
    operand.next(); // accept anything but exit while loop when conditions are met
} 
operator  = operand.nextDouble() ;

您将收到一个错误,因为编译器正在检测一个双精度值,但正在接收一个无效参数,并且可能会抛出某种异常。您可以在try/catch块中包含要检查输入类型的代码,如下所示:

try {
    operator = operand.nextDouble();
} catch (InputMismatchException e) { // Note you are only catching invalid input. Other double values will still be accepted
    flag = false;
}
if (flag) {
    // do logic
} else {
    // go back
}

我希望你能大致了解如何解决这个问题。我刚刚向您展示了一个非常简单的逻辑-您可以根据需要实现它

您遇到了什么错误?请发布错误!-------------------------------------输入左操作数:1.2输入右操作数:3.4------------------------------------------1->乘法2->除法3->加法4->减法------------------------------------------从上面的菜单中选择一个运算符:线程“main”中的p异常java.util.Scanner.throwFor(未知源代码)java.util.Scanner.next(未知源代码)java.util.Scanner.nextDouble(未知源代码)charlespeppersprog5.main(charlespeppersprog5.java:35)@user3316886:请将其添加到您的问题中,而不是作为注释!你可以看到我在哪里输入了p,它给了我一个错误immediately@user3316886此代码将起作用。如果这个答案有助于你解决问题,请记得投票并将其标记为正确答案
try {
    operator = operand.nextDouble();
} catch (InputMismatchException e) { // Note you are only catching invalid input. Other double values will still be accepted
    flag = false;
}
if (flag) {
    // do logic
} else {
    // go back
}