Java try-catch 使用 do-while 循环进行输入验证

标签 java input try-catch do-while

我已经坐在这里(尴尬地)几个小时,试图让 do-while 循环接受用户输入,直到它有效,但是当涉及到我用来的 boolean 值时,我似乎搞砸了尝试退出循环。每当我能让程序部分工作时,捕获异常就会无限重复。

Scanner scnr = new Scanner(System.in);

double wallHeight = 0.0;
boolean valid = false;

// Implement a do-while loop to ensure input is valid
// Prompt user to input wall's height
do {
    try {
        System.out.println("Enter wall height (feet): ");
        wallHeight = scnr.nextDouble();
        valid = false;

        if (wallHeight <=0) {
            throw new Exception ("Invalid Input");
        }
    }
    catch (Exception e) {
        System.out.println("Invalid Input");
    }
} while (!valid);

最佳答案

首先假设输入是有效(并在循环的每次迭代中将valid设置为true)。仅当您遇到异常(希望是您引发的异常)时,才将 valid 设置为 false

do {
    valid = true;
    try {
        System.out.println("Enter wall height (feet): ");
        wallHeight = scnr.nextDouble();
        if (wallHeight <= 0) {
            throw new Exception("Invalid Input");
        }
    } catch (Exception e) {
        valid = false;
        System.out.println("Invalid Input");
    }
} while (!valid);

请注意,您似乎在这里需要异常(exception),因为

do {
    valid = true;
    System.out.println("Enter wall height (feet): ");
    wallHeight = scnr.nextDouble();
    if (wallHeight <= 0) {
        System.out.println("Invalid Input");
        valid = false;
    }
} while (!valid);

也可以。当然,这是假设用户仅输入有效的 double 。如果您需要处理任意输入,则应在尝试使用它之前检查是否存在 double (并且您必须使用任何不是 double 的内容,或者您​​有无限循环)。就像,

do {
    valid = true;
    System.out.println("Enter wall height (feet): ");
    if (scnr.hasNextDouble()) {
        wallHeight = scnr.nextDouble();
        if (wallHeight <= 0) {
            System.out.println("Invalid Input");
            valid = false;
        }
    } else {
        System.out.println("Invalid Input " + scnr.nextLine());
        valid = false;
    }
} while (!valid);

关于Java try-catch 使用 do-while 循环进行输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60255885/

相关文章:

ruby - 为 nil :NilClass"in Ruby for optional associations? 处理每个 "undefined method ` 的优雅方式

java - Objects.hashCode() 和 new Object().hashCode() 的区别?

java - DITA Open Toolkit 的开源替代品

html - 聚焦输入时 iOS 上的触摸滚动问题

java - box2d 主体特定区域上的触摸事件

Java:如何在 try catch 体内向方法调用者抛出异常?

c# - 关闭我的应用程序会干扰我的 Form1_FormClosing 事件

java - 刷新 Hibernate session 需要很长时间

java - 计算二叉搜索树的深度?

javascript - 检测并删除输入框溢出