gpt4 book ai didi

java - 为什么我的代码在出现异常后不断重复?

转载 作者:行者123 更新时间:2023-11-30 07:47:31 24 4
gpt4 key购买 nike

do {

try {
System.out.print("Please enter the hour:");
hour = consoleScanner.nextInt();
if (hour < 1 || hour > 12) {
throw new InvalidHourException();
}

System.out.print("Please enter the minute:");
minute = consoleScanner.nextInt();
if (minute < 0 || minute > 59) {
throw new InvalidMinuteException();
}
if (minute <= 9)
zero = "0";

System.out.print("Please enter either \"AM\" or \"PM\":");
meridiem = consoleScanner.next();
if (!(meridiem.equalsIgnoreCase("AM"))
&& !(meridiem.equalsIgnoreCase("PM"))) {
throw new InvalidMeridiemException();
}

} catch (InvalidHourException hourEx) {
System.out.println(hourEx.getMessage());
consoleScanner.nextLine();
errorOccured = true;
} catch (InvalidMinuteException minuteEx) {
System.out.println(minuteEx.getMessage());
consoleScanner.nextLine();
errorOccured = true;
} catch (InvalidMeridiemException meriEx) {
System.out.println(meriEx.getMessage());
consoleScanner.nextLine();
errorOccured = true;
}

} while (errorOccured);
System.out.println(hour + ":" + zero + minute + meridiem + " is a valid time.");
consoleScanner.close();

}
}

这是我的 do while 循环。输出为:

Please enter the hour:8
Please enter the minute:60
Please enter a minute between 1 to 60
Please enter the hour:

为什么它跳回到小时而不是分钟? catch 语句有问题吗?

最佳答案

由于您有一个 try block ,并且每当引发任何异常时都会重复它,因此在捕获异常后,即使问题不在于小时输入,也会执行提示小时的代码。

为了不重复请求已经有效的输入,您需要为 3 个输入中的每一个输入一个单独的 while 循环 + try-catch block 。

除此之外,当输入有效时,您应该将 errorOccured 设置为 false。否则你将永远不会离开循环。

关于java - 为什么我的代码在出现异常后不断重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33719535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com