2016-10-05 2 views
2

Я пытался получить 10 Integer ввода от пользователей. Кроме того, я хочу обработать исключение, когда пользователи вводят неверный тип данных (не Integer). Однако у меня есть эта проблема при использовании цикла for & try/catch. Например, если я введу String на четвертый номер. Я хотел бы получить это в результате:Try/Catch проблемы при использовании цикла for в Java

Type 1. integer: 15 
Type 2. integer: 152 
Type 3. integer: 992 
Type 4. integer: jj 
Invalid number 
Type 5. integer: Invalid number 
Type 6. integer: Invalid number 
Type 7. integer: Invalid number 
Type 8. integer: Invalid number 
Type 9. integer: Invalid number 
Type 10. integer: Invalid number 

Integers: [15, 152, 992] 

Я не знаю, как повторно цикл после перехвата исключения.

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner(System.in); 
    Integer integer; 
    List<Integer> integerList = new ArrayList<Integer>(); 
    for (int i = 1; i < 11; i ++) { 
     System.out.print("Type " + i + ". integer: "); 
     try { 
     integer = input.nextInt(); 
     integerList.add(integer); 
     } 
     catch (InputMismatchException exc) { 
      System.out.println("Invalid number"); 
     } 

    } 
    System.out.println("Integers: " + integerList); 
} 
+0

Что именно проблема с выходом вы вывесили? В чем вопрос? – EJP

+1

Сначала вам нужно создать MCVE: http://stackoverflow.com/help/mcve Затем вам нужно сбросить буфер сканера: http://stackoverflow.com/questions/10604125/how-can-i-clear-the -scanner-buffer-in-java. Наконец, вам нужно сбросить «i», чтобы вы могли повторить один и тот же ввод. –

ответ

0

Вы не оставляете исключение для цикла. вместо цикла for, я бы рекомендовал цикл while, например.

// your code 
while (integerList.size() < 10) { 
    Scanner input = new Scanner(System.in); 
    // your code 
    try { 
    // your code 
    } 
    catch (InputMismatchException exc) { 
     input.nextLine(); 
     // your code 
    } 
    // your code 
} 
// your code 
+1

Он по-прежнему не решает проблемы для меня. По некоторым причинам оператор исключения вызывается как вход для следующего Integer. Использование цикла while создало инфинитивный цикл здесь. Что-то не так с моим аргументом обработки исключений? –

+0

@HieuCao Добавьте 'input.nextLine()' в свой блок catch перед сообщением об ошибке (см. Http://stackoverflow.com/a/25277332/584862) – mre

+1

спасибо, он работает сейчас, даже с циклом :) –

-1

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

catch (InputMismatchException exc) { 
      System.out.println("Invalid number"); 
      i--;  
} 
-1

Вы должны очистить вход сканера:

import java.util.Scanner; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.InputMismatchException; 

class foo { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner input = new Scanner(System.in); 
     Integer integer; 
     List<Integer> integerList = new ArrayList<Integer>(); 
     for (int i = 1; i < 11; i ++) { 
      System.out.print("Type " + i + ". integer: "); 
      try { 
       integer = input.nextInt(); 
       integerList.add(integer); 
      } 
      catch (InputMismatchException exc) { 
       System.out.println("Invalid number"); 
       input.nextLine(); 
       --i; 
      } 
     } 
     System.out.println("Integers: " + integerList); 
    } 
} 
Смежные вопросы