【发布时间】:2020-02-22 18:26:13
【问题描述】:
这是我的一部分代码。好吧,我的问题是当我输入错误的值时如何跳过 catch 块?例如,如您所见,我需要坐标为 double 或 Float,但是当我输入 String 时,它在循环时开始无限。如何防止它并让程序从头开始,直到用户输入正确的值?
main_loop:
while (true) {
int i = 3;
System.out.println("Attemts left: " + i);
loop_label:
while (true) {
try {
temp_coords.setX(temp_scn.nextDouble());
temp_coords.setY(temp_scn.nextFloat());
break main_loop;
} catch (Exception e) {
System.out.println("wrong format!");
} finally {
break loop_label;
}
}
i--;
if(i == 0){
break;
}
}
这是我没有循环和标签的代码 在正确的数据传入之前,我怎样才能使这段代码正常工作
try {
temp_coords.setX(temp_scn.nextDouble());
temp_coords.setY(temp_scn.nextFloat());
} catch (Exception e) {
System.out.println("wrong format!");
}
【问题讨论】:
-
你真的应该重新设计你的代码。摆脱你的无限循环和标签。按照这里的代码流是不可能的。
-
在您的
i == 0行中,i始终为 2。 -
@Kayaman 已编辑
-
扫描仪在输入格式不合适时抛出异常。你无法避免这一点。当然,您可以将输入读取为字符串,然后进行转换(例如通过
Integer.parseInt(s),但如果输入不适合,也会引发异常。为避免异常,您需要在解析输入之前验证输入(例如,通过正则表达式) 但为什么呢?异常在出错的情况下很好,它们不是被禁止的。