【问题标题】:Catching a non-Double in Java input在 Java 输入中捕获非 Double
【发布时间】:2020-06-13 07:31:21
【问题描述】:

我正在尝试验证用户输入的学校作业,其中负数或除双精度外的任何内容都会导致循环重试。其余代码对输入进行了一些简单的算术运算,这些都是功能性的,所以我没有包含它,但这是我到目前为止的输入验证。现在输入一个负数可以做我想做的事情,但是输入一个不同的字符会导致

的无限循环

“空”

输入墙高(英尺):"

当负数异常按预期工作时,为什么不抛出 !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());

【问题讨论】:

  • 欢迎来到 Stack Overflow。 在询问之前您应该搜索现有的Q/As...例如@987654321 @。另请注意,此处的社区不会取代其他出色的在线资源,例如教程。作为参考,请查看How to Ask a Good Question

标签: java validation try-catch do-while


【解决方案1】:

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

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

^[0-9]+\.[0-9]+$

只需使用String.matches(regex) 来验证您的输入。

如果您想了解每个符号的作用: ^ 表示一行的开始,这意味着它之前没有任何内容。 同样,$ 表示一行的结束,意味着后面不会有任何内容。

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

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

然后我们有句点,伴随着一个转义字符\,因为在正则表达式中,. 本身表示“任何字符”,因此我们必须对其进行转义。

如果你想玩和了解更多正则表达式,我建议你访问this site

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2013-12-04
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多