2013-10-10 5 views
0

У меня есть программа, которая в первом экземпляре сообщает пользователю свои параметры и принимает пользовательский ввод, соответствующий желаемой опции. У меня есть обработка исключений для этого, но если есть исключение, как я могу заставить программу продолжать цикл, пока не будет принят допустимый вход?Завершить программу в статистике try/catch

import java.util.InputMismatchException; 
import java.util.Scanner; 
public class Application 
{ 

    public static void main(String[] args) 
    { 
     try 
     { 
      int option; 
      Scanner input = new Scanner(System.in); 
      System.out.println("Welcome to Toys Rental Ltd! \n\nChoose an option: " 
        + "\n-Rent a toy (enter 1) " 
        + "\n-Return a toy (enter 2) " 
        + "\n-Add a new member of a toy (enter 3) " 
        + "\n-Update member details (enter 4) " 
        + "\n-Update toy details (enter 5) " 
        + "\n-Print a member and toy list (enter 6) " 
        + "\n-Print a member and rental statment (enter 7) " 
        + "\n Or for help please enter 0"); 

      option = input.nextInt(); 

      if(option 

     } 

     catch (InputMismatchException iie) 
     { 
      System.out.println("Invalid input, please try again"); 
     } 

    } 
} 
+1

Почему вы просто не используете 'if statement'? вместо утверждения try catch, проверка ввода сначала перед обработкой была бы идеальной, вместо того, чтобы позволить исключению быть пойманным – user2705620

+1

попробуйте обернуть попытку catch в цикле while –

+0

Поместите try/catch внутри цикла. –

ответ

-1

Поместите логику, которая запрашивает и принимает входные данные в метод, кроме main и вызывать этот метод после того, как вы печатаете сообщение об ошибке, или делать то, что peeskillet сказал в комментариях.

+0

Это не цикл, если вы не предлагаете рекурсивное решение, которое не подходит для этой проблемы. –

+0

«Loop» показалось мне используемым в сугубо синтаксическом смысле, хотя я мог ошибаться в этой интерпретации, если это было домашнее задание. Вызов вторичного метода заставляет программу «зацикливаться» с точки зрения пользователя ... вы правы, однако, что рекурсия не является самым большим решением. – Josh

1

Ну, положите в петлю.

import java.util.InputMismatchException; 

public class Application 
{ 

public static void main(String[] args) 
{ 
    boolean retry=true; 
    while (retry){ 
      try 
      { 

       int option; 
       Scanner input = new Scanner(System.in); 
       System.out.println("Welcome to Toys Rental Ltd! \n\nChoose an option: " 
       + "\n-Rent a toy (enter 1) " 
       + "\n-Return a toy (enter 2) " 
       + "\n-Add a new member of a toy (enter 3) " 
       + "\n-Update member details (enter 4) " 
       + "\n-Update toy details (enter 5) " 
       + "\n-Print a member and toy list (enter 6) " 
       + "\n-Print a member and rental statment (enter 7) " 
       + "\n Or for help please enter 0"); 

       option = input.nextInt(); 

       retry=false; 
     } 

     catch (InputMismatchException iie) 
     { 
      System.out.println("Invalid input, please try again"); 
       retry=true; 
     }   
    } 


} 
+0

следует положить 'retry = false' в конце вашего' try' блока? –

+0

Хороший улов, когда выбрано Exception, блок try разрывается, поэтому, когда есть Исключение, 'retry = false' не будет выполняться излишне. Ред. – qwertyuiop5040

0

Просто добавьте в то время как цикл, где вы установите «конец» логическое значение истина, когда вы уверены, вход прямо или установить «конец» булево к ложному, когда исключение ловится.

Howevever в этом примере исключение не является хорошим способом обработки, простое «if (good_input)» является достаточно хорошим.

public static void main(String[] args) { 
    boolean end = false; 
    while (end == false) { 
     try { 
      int option; 
      Scanner input = new Scanner(System.in); 
      System.out.println("Welcome to Toys Rental Ltd! \n\nChoose an option: " 
        + "\n-Rent a toy (enter 1) " 
        + "\n-Return a toy (enter 2) " 
        + "\n-Add a new member of a toy (enter 3) " 
        + "\n-Update member details (enter 4) " 
        + "\n-Update toy details (enter 5) " 
        + "\n-Print a member and toy list (enter 6) " 
        + "\n-Print a member and rental statment (enter 7) " 
        + "\n Or for help please enter 0"); 

      option = input.nextInt(); 

      if (option == 1) { 
       //..... 
      } 
      //..... 
      end = true; 
     } catch (InputMismatchException iie) { 
      end = false; 
      System.out.println("Invalid input, please try again"); 
     } 
    } 
} 
Смежные вопросы