检查输入以查看它是否是 Java 中的双精度输入

Checking input to see if its a double in Java

我正在编写代码,要求输入 2 个数字,然后将它们相加 up/multipies/divides。我设法让它工作,但我遇到了一个小问题。

这是困扰我的代码部分:

double number1 = 0;
do {
    try {
        System.out.print("First number: ");
        number1 = input.nextDouble();
    } catch (InputMismatchException e) {
        System.out.print("This is not a number. ");
    }
    input.nextLine();
} while (number1 == 0);

对于我打算做的事情,它工作得很好,就是要一个号码。如果用户没有输入数字,它会捕获异常并阻止它退出。

while (number1 == 0);

这是我用来测试 try 和 catch 是否按预期工作的方法,但当然意味着 number1 不能为 0,否则它不会停止并继续询问数字。

我希望它在没有输入双精度数的情况下一直要求输入,我应该替换什么?

因为这是一个assigment,我不得不一直要求一个double,如果最好不要使用例外,那是可以接受的。但是它必须为 number1 分配一个数字,我可以稍后在程序中使用

首先,您可以通过以下方式修改代码以使其正常工作 - 您可以添加 boolean 标志以指示循环已成功:

double number1 = 0;
boolean success;
do {
    success = true;
    try {
        System.out.print("First number: ");
        number1 = input.nextDouble();
    } catch (InputMismatchException e) {
        System.out.print("This is not a number. ");
        success = false;
    }
    input.nextLine();
} while (!success);

接下来,应该通过在调用 nextDouble 之前调用 hasNextDouble 来修改代码以避免捕获异常:

double number1 = 0;
while(true) {
    System.out.print("First number: ");
    if (input.hasNextDouble()) {
        number1 = input.nextDouble(); // This will not throw an exception
        break;
    }
    System.out.print("This is not a number. ");
    input.nextLine();        
}

如果您可以捕获异常,则可以使用 Double class 提供的 parseDouble 函数。

实现此目的的简单代码片段是

public class AcceptDouble {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double number1 = 0;

        while(true){
            try {
                number1 = Double.parseDouble(sc.next());
                System.out.println("Got: " + number1);
                // DO WHAT YOU WANT WITH NUMBER1
            }
            catch (NumberFormatException timeToBreak) {
                System.out.println("Time to break");
                break;
            }
        }
    }
}

只要输入的数字有效,它就会一直接受新的输入。附上示例输出片段以供参考

34
Got: 34.0
23
Got: 23.0
12
Got: 12.0
end
Time to break