public static void main(String[] args) {
Scanner consoleScanner = new Scanner(System.in);
int hour = 0;
int minute = 0;
String meridiem = "";
String zero = "";
boolean errorOccured = false;
do {
try {
System.out.print("Please enter the hour:");
hour = consoleScanner.nextInt();
System.out.println("Please enter the minute:");
minute = consoleScanner.nextInt();
if (minute <= 9)
zero = "0";
System.out.println("Please enter either \"AM\" or \"PM\":");
meridiem = consoleScanner.nextLine();
if (hour < 1 || hour > 12) {
throw new InvalidHourException();
}
if (minute < 0 || minute > 59) {
throw new InvalidMinuteException();
}
if (!meridiem.equals("AM") || !meridiem.equals("PM")) {
throw new InvalidMeridiemException();
}
} catch (InvalidHourException hourEx) {
System.out.println(hourEx.getMessage());
} catch (InvalidMinuteException minuteEx) {
System.out.println(minuteEx.getMessage());
} catch (InvalidMeridiemException meriEx) {
System.out.println(meriEx.getMessage());
}
} while (errorOccured);
System.out.println(hour + ":" + zero + minute + meridiem + " is a valid time.");
}
}
我的输出如下:
请输入时间:1 请输入分钟:3 请输入“AM”或“PM”: 请输入上午或下午。 1:03 为有效时间。
我想知道为什么它不让我设置 AM 或 PM 而只是跳到异常?
最佳答案
这种情况总是会抛出异常,因为 meridiem
不能同时等于“AM”和“PM”:
if (!meridiem.equals("AM") || !meridiem.equals("PM")) {
throw new InvalidMeridiemException();
}
应该是:
if (!meridiem.equals("AM") && !meridiem.equals("PM")) {
throw new InvalidMeridiemException();
}
关于java - 为什么我的代码会跳转到catch部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718284/