[英]Java try-catch input validation with do-while loop
我已经坐在这里(尴尬地)几个小时试图让 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
(并在循环的每次迭代中将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
(s)。 如果您需要处理任意输入,则应在尝试使用它之前检查是否存在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);
这是另一个例子。我只是在 if 检查之后移动了设置 valid = true 的代码。 只有当它有效时,它才能做到那么远。 否则有效将是假的,它会循环。
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.