使用do while循环进行Java try catch输入验证
我已经尴尬地坐在这里好几个小时了,试图让do-while循环接受用户输入,直到它有效为止,但当我使用布尔值尝试退出循环时,我似乎搞砸了。每当我能让程序部分工作时,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
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);