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”: 请输入AM或PM。 1:03是一个有效的时间。
我想知道为什么它不让我设置AM或PM而只是跳到例外?
答案 0 :(得分:1)
这种情况总会引发异常,因为meridiem
不能同等于“AM”和“PM”:
if (!meridiem.equals("AM") || !meridiem.equals("PM")) {
throw new InvalidMeridiemException();
}
应该是:
if (!meridiem.equals("AM") && !meridiem.equals("PM")) {
throw new InvalidMeridiemException();
}
答案 1 :(得分:0)
除了@Eran所说的内容之外,你还必须改变这个
meridiem = consoleScanner.nextLine();
通过
meridiem = consoleScanner.next();
原因:nextLine使此扫描器超过当前行并返回跳过的输入,然后查找并返回此扫描器中的下一个完整令牌。
有关详细说明,请参阅此处:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html