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

使用do while循环进行Java try catch输入验证,java,input,try-catch,do-while,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

我已经尴尬地坐在这里好几个小时了,试图让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);

首先假设输入有效,并在循环的每次迭代中将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);

这里是另一个例子。我刚刚在if检查之后移动了设置valid=true的代码。只有当它有效的时候,它才能走那么远。否则valid将为false,并将循环

公共类基本类{ 公共静态无效字符串[]args{ 双壁高度=0.0; 布尔有效=假; 扫描仪scnr=新的ScannerSystem.in; //实现do-while循环以确保输入有效 //提示用户输入墙的高度 做{ 试一试{ System.out.Printl输入墙高英尺:; 墙高=scnr.nextDouble;
如果wallHeight在上传两次将有效变量设置为false的代码时似乎也犯了错误。这是偶然的。很抱歉,可能是我没有正确描述问题。但我希望在收到有效输入后退出循环,并在出现无效输入时返回循环顶部。@b更多的是w这段代码的作用是什么。只有循环重复时,valid才应该为false。因此,您必须在某个点将其设置为true,否则循环将永远运行。非常感谢。这就是我在处理替代输入时遇到的问题。我想try catch将有助于处理字符串输入之类的内容。它们在do-while循环或scnr.hasNextDouble是绝对必要的吗?只是让我知道将来是否需要它。它可以,但您需要catch块中的scnr.nextLine,否则任何东西都不会消耗导致异常的东西。很高兴提供帮助。欢迎使用堆栈溢出。请使用。
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);
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);