2013-09-16 2 views
2

Это мой первый опыт использования обработки исключений, поэтому будьте нежны. У меня есть простой класс blob, который принимает идентификатор, идентификатор должен быть от 30 до 50 или иначе генерируется исключение.while loop с обработкой исключений

public class Blob { 
int id; 

public Blob() { 

} 

public Blob(int id) throws Exception { 
    this.id = id; 
    if (id < 30 || id > 50) 
     throw new Exception ("id = " +id+ ", must be between 30 and 50 inclusive"); 
} 
} 

Это должно побудить пользователя ввести идентификатор и бросить исключение, если это не от 30 до 50 лет, и следует продолжать до тех пор, пока пользователь не введет правильный вход, а затем просто отображает номер документа.

public class BlobCreator { 

public static void main(String[] args) { 
    int id; 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter ID number: "); 
    id = scan.nextInt(); 

    do { 
     try { 
      Blob b = new Blob(id); 
     } 

     catch (Exception e) { 
      System.out.println(e); 
     } 
     System.out.println("Enter a different ID: "); 
     id = scan.nextInt(); 
    } 
    while(true); 
    } 
System.out.println("Blob ID: " +id); 
} 

Я думаю, что я использую бросок и поймать правильно, но мой цикл не работает должным образом, так что я думаю, что должно быть простое исправление, но я не могу получить это только право. Также используется цикл while, так как у меня есть лучший способ для этой ситуации или есть лучший способ петли через бросок и улов?

Спасибо за любую помощь

ответ

4

Вы должны поместить break; после того, как код будет успешно выполнен.

do { 
    try { 
     Blob b = new Blob(id); 
     break; 
    } 
    catch (Exception e) { 
     System.out.println(e); 
    } 
    System.out.println("Enter a different ID: "); 
    id = scan.nextInt(); 
} while(true); 

Таким образом, каждый раз, когда петля достигла конца своего тела, она вырвалась из петли. Вы должны разорваться только после успешного создания blob. Хотя я не понимаю, почему вы положили break в любом случае. Цикл while может проверить, был ли введенный ввод действительным и просто остановить цикл.

Я изменил while в do-while петли ... С помощью true цикла будет выполняться бесконечно, если исключение не брошено конструктором ... Это делает код более универсальным (если изменить условие сгустка -construction, вам не нужно изменять условие цикла while).

+0

Изменен ответ ... –

+0

Да, такая же проблема, когда я делаю так. – user2745043

+0

Вторая модификация, вы должны, конечно, сканировать другой идентификатор ... :(мой плохой ... –

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