2015-10-12 2 views
0

Я пытаюсь понять, как продолжить код даже после того, как будет обнаружено исключение. Представьте, что у меня есть текстовый файл, заполненный цифрами. Я хочу, чтобы моя программа читала все эти цифры. Теперь давайте скажем, что там есть смешанное письмо, возможно ли, чтобы исключение было поймано, а затем код продолжает цикл? Мне понадобится Try и ловит в цикле do-while? Пожалуйста, предоставьте мне свои идеи, я бы очень признателен. Я представил свой код на всякий случай:Почему моя программа Java выходит после исключения?

NewClass newInput = new NewClass(); 
    infile2 = new File("GironEvent.dat"); 
    try(Scanner fin = new Scanner (infile2)){ 
     /** defines new variable linked to .dat file */ 
     while(fin.hasNext()) 
     { 
      /** inputs first string in line of file to variable inType */ 
      inType2 = fin.next().charAt(0); 
      /** inputs first int in line of file to variable inAmount */ 
      inAmount2 = fin.nextDouble(); 

      /** calls instance method with two parameters */ 
      newInput.donations(inType2, inAmount2); 
      /** count ticket increases */ 
      count+=1; 
     } 
     fin.close(); 
    } 
    catch (IllegalArgumentException ex) { 
       /** prints out error if exception is caught*/ 
       System.out.println("Just caught an illegal argument exception. "); 
       return; 
      } 
    catch (FileNotFoundException e){ 
     /** Outputs error if file cannot be opened. */ 
     System.out.println("Failed to open file " + infile2 ); 
     return; 

    } 
+1

Вы можете поместить блок try-catch внутри цикла, где блок catch регистрирует ошибку и переходит к следующей итерации цикла. – t0mppa

ответ

3

Объявить свой примерки поймать блок внутри цикла, так что цикл может продолжаться в случае исключения.

В вашем коде Scanner.nextDouble выкинет InputMismatchException, если следующий токен не может быть переведен в действительное двойное значение. Это то исключение, которое вы хотели бы поймать внутри своего цикла.

0

Да, я бы поставил ваш try/catch в цикл while, хотя, думаю, вам нужно будет удалить оператор return.

0

Да. У этих парней все в порядке. Если вы поместите свой try-catch внутри цикла, исключение останется «внутри» цикла. Но так, как вы это делаете сейчас, когда генерируется исключение, исключение «выйдет» из цикла и продолжит движение до тех пор, пока оно не достигнет блока try/catch. Как так:

try     while 
    ^
    | 
    while   vs  try 
    ^     ^
    |      | 
Exception thrown  Exception thrown 

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

0

Если вы хотите продолжить после захватывающего исключения:

  1. Удалить оператор возврата, когда вы столкнулись с исключением.

  2. Поймать все возможные исключения изнутри и снаружи во время цикла, так как ваш текущий блок захвата захватывает только 2 исключения. Посмотрите на возможные исключения со Сканером API.

  3. Если вы хотите продолжить работу после любого исключения, поймайте еще одно общее исключение. Если вы хотите выйти в случае общего исключения, вы можете вернуть его, поймав его.

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