Java 如何防止用户在需要数字时输入空白或只按enter键?

Java 如何防止用户在需要数字时输入空白或只按enter键?,java,Java,我尝试只接受用户的数字。如果他们输入一个字母,该代码会给他们一条错误消息。但是如果他们点击回车键或者只是空白,这就不起作用了。我尝试将一个名为test的字符串初始化为null,然后设置scnr.nextLine()=test,然后检查test是否为空,但我不知道在这样做时如何保持程序的其余部分正常运行。扫描仪对我来说很棘手。请帮忙 double mainNumber = 0; System.out.print("Enter a number: ");

我尝试只接受用户的数字。如果他们输入一个字母,该代码会给他们一条错误消息。但是如果他们点击回车键或者只是空白,这就不起作用了。我尝试将一个名为test的字符串初始化为null,然后设置scnr.nextLine()=test,然后检查test是否为空,但我不知道在这样做时如何保持程序的其余部分正常运行。扫描仪对我来说很棘手。请帮忙

        double mainNumber = 0;

        System.out.print("Enter a number: ");

            if (scnr.hasNextDouble() ){
                mainNumber = scnr.nextDouble();
                System.out.println(mainNumber);
                scnr.nextLine();
            }
            else {
                System.out.println("Sorry, please enter a number.\n");
                scnr.nextLine();
            }

您可以使用以下代码段读取一个
double
值:

Scanner scanner = new Scanner(System.in);
try {
    double number = Double.parseDouble(scanner.nextLine());
} catch (NumberFormatException e) {
    e.printStackTrace();
}

我猜你的代码是在while循环还是什么?所以它会一直询问,直到用户输入正确的值

然后(为了方便起见)应该使用
String str=scnr.nextString()
而不是
nextDouble()
,并分析它返回的字符串

您可以使用
str.trim()
删除空格(然后使用
str.isEmpty()
检查字符串是否为空),并检查它是否是一个可以使用regexp(以及您可以找到的任何regex教程)的数字,或者只使用此regex:
str.matches(\\d+”)
(如果str是一个数字,则返回true,但此处没有逗号)


当然,不要忘记将字符串转换为double后的:
double.parseDouble(str.replace(“,”,”)。我希望“替换”部分是显而易见的;)

在用户输入有效数字之前,您必须根据需要使用while循环输入

此代码

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    double mainNumber = 0;
    boolean isValidNumber = false;

    System.out.print("Enter a number: ");
    while (isValidNumber == false) {
        String line = scnr.nextLine();
        try {
            mainNumber = Double.valueOf(line);
            isValidNumber = true;
        } catch (NumberFormatException e){
            System.out.print("Sorry, please enter a number.\n");
        }
    }

    System.out.println("Main number is: " + mainNumber);
}
具有此示例输出:

Enter a number: sdfgsgxb
Sorry, please enter a number.
xcvbxcvb
Sorry, please enter a number.
gsfdfgsdf
Sorry, please enter a number.
aearg
Sorry, please enter a number.
15.77
Main number is: 15.77

这个程序的目的是,我将获取存储在mainNumber中的值,并用它进行计算,然后就结束了。。。有整数、小数、十六进制/八进制/指数/。。格式化的数字、负数、复数、无理数等。我在中的
Console#echo(布尔值)
参考中发现,该(私有)方法关闭用户输入echo。有了它,您可以为控制台编写自己的输入掩码。检查标题:“如何防止用户输入空格[…]”@BinkanSalaryman,我们得到了
java.lang.NumberFormatException:empty String
如果用户只输入空格,您的答案没有错。但从被接受的答案中,我可以看出这个问题表达得很糟糕……做得好,这就是我准备提交的答案。或者,您可以在相同条件下使用
do-while
循环,尽管这会阻止简单打印“错误”消息。