2015-11-15 2 views
1
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: 

почему это отпрыгнуть в час вместо минуты? Что-то не так в заявлениях об уловах?

+0

«Почему он возвращается в час вместо минут?» Вы имеете в виду переход на бит обработки исключений Hour? Может быть, отлаживать его? – TungstenX

+0

hey @QuakeCore, мне было интересно, почему; должен быть удален? Это дает мне синтаксическую ошибку при ее удалении. Благодаря! – elequang

+0

@elequang мой плохо его не удалять – QuakeCore

ответ

1

Поскольку у вас есть один блок try, и вы повторяете его всякий раз, когда возникает какое-либо исключение, после того как исключение поймано, код, запрашивающий час, выполняется, даже если проблема не связана с часовым вводом.

Чтобы не повторять запрос на входные данные, которые уже были действительны, для каждого из трех входов вам понадобится отдельный блок while + try-catch.

Кроме того, вы должны установить errorOccured в значение false, если вход действителен. В противном случае вы никогда не покинете цикл.

+0

Большое вам спасибо @Eran, вы - реальная жизнь! Я понимаю, что пошло не так, и что случилось. – elequang

Смежные вопросы