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.");
}
}Почему мой код перескакивает на часть catch?
Мой вывод выглядит:
Пожалуйста, введите час: 1 Пожалуйста, введите минуту: 3 Пожалуйста, введите либо "AM" или "PM": Пожалуйста, введите либо AM или ВЕЧЕРА. 1:03 - допустимое время.
Мне было интересно, почему это не позволяет мне настроить AM или PM и просто прыгать на исключение?
FGITW эффекта опять ... :( – Arc676
привета не || среднего или хотя так, как если бы его не равно AM или PM затем бросить исключение Может вам. объясните мне более подробно о && part? – elequang
@elequang '||' означает или, поэтому, если meridiem не равно AM или meridiem не равен PM, вы генерируете исключение. Правильное условие также может быть сформулировано как 'if (! (meridiem.equals (" AM ") || meridiem.equals (" PM ")))'. – Eran