Java试用捕获输入验证与do-while循环

时间:2020-02-17 04:14:20

标签: java input try-catch do-while

我一直在这里(尴尬地)坐了好几个小时,试图获得一个do-while循环来接受用户输入,直到输入有效为止,但是当我使用的布尔值出现时,我似乎一团糟尝试退出循环。只要我能使程序部分运行,catch异常就会无限重复下去。

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);

2 个答案:

答案 0 :(得分:1)

首先假设输入为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);

请注意,您在这里似乎没有 例外情况,例如

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); 的任何东西,否则会产生无限循环)。喜欢,

<Command name="CD and run file" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /C &quot;cd /d $(CURRENT_DIRECTORY) &amp;&amp; $(FULL_CURRENT_PATH)&quot;</Command>

答案 1 :(得分:0)

这是另一回事,我只是在if检查之后移动了将有效= true的代码。只有当其有效时,它才能达到目标。否则有效将为false并将循环。

public class BasicDoWhile {

    public static void main(String[] args) {
        double wallHeight = 0.0;
        boolean valid = false;

        Scanner scnr = new Scanner(System.in);

        // 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();

                if (wallHeight <= 0) {
                    throw new Exception("Invalid Input");
                }

                valid = true;

            }
            catch (Exception e) {
                System.out.println("Invalid Input");
            }

        } while (!valid);

    }
}