2015-09-15 4 views
3

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

boolean wenttocatch; 

     do{ 


     try { 
      wenttocatch=false; 
      number_of_rigons=sc.nextInt(); // sc is an object of scanner class 
     } catch (Exception e) { 
      wenttocatch=true; 
      System.out.println("xx"); 
     } 

     }while(wenttocatch==true); 

и я получаю бесконечный цикл я не могу понять, почему и как я могу определить, если пользователь вводит некоторые не целое число, и если пользователь вводит и не целое число, как задать пользователю введите снова

Обновление , когда я печатаю исключение, я получаю exce ption as InputMismatchException, что мне делать

ответ

2

Вам не нужно делать попытку поймать. Этот код будет делать трюк для вас:

public static void main(String[] args) { 
    boolean wenttocatch = false; 
    Scanner scan = new Scanner(System.in); 
    int number_of_rigons = 0; 
    do{ 
     System.out.print("Enter a number : "); 
     if(scan.hasNextInt()){ 
      number_of_rigons = scan.nextInt(); 
      wenttocatch = true; 
     }else{ 
      scan.nextLine(); 
      System.out.println("Enter a valid Integer value"); 
     } 
    }while(!wenttocatch); 
} 
+0

thnx работает – pavithra

0

В любое время, когда вы получаете исключение, wenttocatch устанавливается в true, и программа будет застревать в бесконечном цикле. Пока вы не получите исключения, вы не получите бесконечный цикл.

0

Логика, если sc.nextInt() вызывает ошибку этот

1) wenttocatch установлен на ложной

2) sc.nextInt() бросает ошибку

3) wenttocatch устанавливается к истинным

4) повторить [потому что wenttocatch верно]

чтобы решить этот комплект wentocatch = ложное в уловах заявлении

catch (Exception e) { 
       wenttocatch=false; 
       System.out.println("xx"); 
      } 

, если вы делаете больше, чем вы показать здесь, использовать счетчик [если ваш подсчет или логическое значение, если вы не], но если вы делаете более, не делают первое выше

boolean wenttocatch; 
int count = 0; 

      do{ 


      try { 
       wenttocatch=false; 
       number_of_rigons=sc.nextInt(); // sc is an object of scanner class 
      } catch (Exception e) { 
       count++; 
       wenttocatch=true; 
       System.out.println("xx"); 

      } 

      }while(wenttocatch==true && count < 1); 

Ответить Комментарий:

Я думаю, вы хотите получить ints, пока пользователь больше не войдет. В зависимости от входного один из способов сделать это это

int number_of_rigons; 
while((number_of_rigons = sc.nextInt()) != null){ 
    //do something 
} 
+0

хорошо, что я хочу, я хочу, чтобы получить целое, пока он не входит в число цикл в то время как должен работать снова и снова – pavithra

+0

Не совсем уверен, что вы имеете в виду. Вы хотите, чтобы все целые числа вводились пользователем, пока они больше не будут вводить целые числа? – applecrusher

4

Scanner не продвигается, пока деталь не читается. Это упоминается в Scanner JavaDoc. Следовательно, вы можете просто прочитать значение с помощью метода .next() или проверить, hasInt() перед чтением int значение.

boolean wenttocatch; 
     int number_of_rigons = 0; 
     Scanner sc = new Scanner(System.in); 
     do { 

      try { 
       wenttocatch = false; 
       number_of_rigons = sc.nextInt(); // sc is an object of scanner class 
      } catch (InputMismatchException e) { 
       sc.next(); 
       wenttocatch = true; 
       System.out.println("xx"); 
      } 

     } while (wenttocatch == true); 
-1
.... 
try { 
    .... 
} catch (Exception e) { 
    sc.next(); 
    wenttocatch=true; 
    System.out.println("xx"); 
} 
+0

Но он также решил мою проблему. –

+0

Извините, взглянул на это в новых сообщениях и ошибочно подумал, что «хорошо gotocatch по-прежнему правдиво, так что он все еще собирается зацикливаться». Однако это похоже на ответ Джеймса Джитина. – Vitruvius