捕获Java输入中的非双精度

捕获Java输入中的非双精度,java,validation,try-catch,do-while,Java,Validation,Try Catch,Do While,我正在尝试验证学校作业的用户输入,其中负数或除double之外的任何数字都会导致循环重试。代码的其余部分对输入做了一些简单的运算,这些都是功能性的,所以我没有包括它,但这里是我到目前为止的输入验证。现在输入一个负数就是我想让它做的,但是输入一个不同的字符会导致无限循环 “无效 输入墙高度(英尺):“ 为什么这条路不通呢!scnr.hasNextDouble()异常抛出,当负数异常按预期工作时,为什么它会无限重复?我非常感谢你能为我提供的任何帮助,谢谢 public static void mai

我正在尝试验证学校作业的用户输入,其中负数或除double之外的任何数字都会导致循环重试。代码的其余部分对输入做了一些简单的运算,这些都是功能性的,所以我没有包括它,但这里是我到目前为止的输入验证。现在输入一个负数就是我想让它做的,但是输入一个不同的字符会导致无限循环

“无效

输入墙高度(英尺):“

为什么这条路不通呢!scnr.hasNextDouble()异常抛出,当负数异常按预期工作时,为什么它会无限重复?我非常感谢你能为我提供的任何帮助,谢谢

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    double wallHeight = 0.0;
    double wallWidth = 0.0;
    double wallArea = 0.0;
    double gallonsPaintNeeded = 0.0;

    final double squareFeetPerGallons = 350.0;


    // Implement a do-while loop to ensure input is valid  

    do {
        try {
            System.out.println("Enter wall height (feet): ");
            wallHeight = scnr.nextDouble();
            if (wallHeight <= 0) {
                throw new Exception("Enter positive number");
            }
            else if (!scnr.hasNextDouble()) {
                throw new Exception("Invalid input.");
            }
            }
        catch(Exception excpt){
            System.out.println(excpt.getMessage());
        }
        }while(wallHeight <= 0 || !scnr.hasNextDouble());
publicstaticvoidmain(字符串[]args){
扫描仪scnr=新扫描仪(System.in);
双壁高度=0.0;
双壁宽=0.0;
双瓦莱拉=0.0;
需要两加仑的油漆=0.0;
最终双平方英尺Pergallons=350.0;
//实现do-while循环以确保输入有效
做{
试一试{
System.out.println(“输入墙高(英尺):”;
墙高=scnr.nextDouble();

if(wallHeight您需要确保输入是双精度的,而不是字符串或整数。翻转if和else if的顺序,首先检查输入是否为双精度,然后才检查是否为负

或者,您可以使用验证输入。下面的正则表达式检查0到9之间的任何数字,后跟句点和0到9之间的另一个数字。请注意,它也适用于多个数字

^[0-9]+\.[0-9]+$
只需使用
String.matches(regex)
验证您的输入

如果您想澄清每个符号的作用:
^
表示一行的开头,意思是前面没有任何内容。 同样地,
$
表示一行的结束,这意味着后面不会有任何内容

[0-9]
是有效字符的范围,在本例中为0到9

+
表示这些字符中可以有多个(多个数字)

然后我们有句号,伴随着转义字符
\
,因为在正则表达式中,
本身意味着“任何字符”,因此我们必须转义它

如果您想更多地玩和了解Regex,我建议您访问。

欢迎来到Stack Overflow。在提出任何问题之前,您需要搜索已经存在的Q/a…like。另外请注意,这里的社区并没有取代其他优秀的在线资源,如教程。有关参考,请参阅。