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