Как продолжить выполнение Java-программы после создания исключения? - PullRequest
5 голосов
/ 17 февраля 2012

Мой пример кода выглядит следующим образом:

public class ExceptionsDemo {

    public static void main(String[] args) {
        try {
            int arr[]={1,2,3,4,5,6,7,8,9,10};
            for(int i=arr.length;i<10;i++){
                if(i%2==0){
                    System.out.println("i =" + i);
                    throw new Exception();
                }            
            }
        } catch (Exception e) {
            System.err.println("An exception was thrown");
        }            
    }
}

Мое требование состоит в том, чтобы после того, как исключение было перехвачено, я хочу обработать оставшиеся элементы массива. Как я могу это сделать?

Ответы [ 5 ]

8 голосов
/ 17 февраля 2012

Переместите блок try catch в цикл for, и тогда он будет работать

4 голосов
/ 17 февраля 2012

Вам нужно немного перестроить его так, чтобы try / catch находился внутри цикла for, а не в нем, например,

for (...) {
  try {
    // stuff that might throw
  }
  catch (...) {
    // handle exception
  }
}

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

3 голосов
/ 17 февраля 2012

Ваш код должен выглядеть следующим образом:

public class ExceptionsDemo {

    public static void main(String[] args) {
        for (int i=args.length;i<10;i++){
            try {
                if(i%2==0){
                    System.out.println("i =" + i);
                    throw new Exception();  // stuff that might throw
                }
            } catch (Exception e) {
                System.err.println("An exception was thrown");
            }
        }
    }
}
2 голосов
/ 17 февраля 2012

Только не бросайте исключение, тогда:

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < arr.length; i++) {
    if (i % 2 == 0) {
        System.out.println("i = " + i);
    }  
}    

Или бросить его и поймать его внутри цикла, а не снаружи (но я не вижу смысла в выдаче исключения в этом тривиальном примере):

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < arr.length; i++) {
    try {
        if (i % 2 == 0) {
            System.out.println("i = " + i);
            throw new Exception();
        }
    }
    catch (Exception e) {
        System.err.println("An exception was thrown");
    }
}

Примечание: посмотрите, как гораздо легче читать код, если он правильно написан с отступом и содержит пробелы вокруг операторов.

1 голос
/ 17 февраля 2012

Вы не можете сделать это, потому что ваш массив определен в предложении try.Если вы хотите иметь доступ к нему, переместите его оттуда.Также, возможно, вам следует каким-то образом сохранить то, что я вызвал в исключении, чтобы вы могли продолжить с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...