Проблема с получением переменной из блоков try catch в Java - PullRequest
0 голосов
/ 06 декабря 2018

У меня странная проблема с моей программой.Я написал следующий код:

class Divide{

    int a, b;

        int divide(int a, int b) {

            try {

             if (b > 1)
                    throw new ArithmeticException("Generating exception");}
             catch (ArithmeticException e) {
                System.out.println("Caught exception 1st time" + e);

             throw e;

            }
        int c = a / b;


        return c; 
    } 
}

И после этого я хотел сделать обработку исключений и получить переменную из нее следующим образом:

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    Divide d = new Divide();

    int result = 0;

                    try
                    {
                        result = d.divide(12, 2);

                    } catch (ArithmeticException e)
                    {
                        System.out.println("2 raz");
                    }

                    System.out.println(result); ///getting 0 insted of 6!

    }

}

И я все еще получаю переменную перед попыткойблокКак я могу сделать этот тип обработки исключений и получить переменную со значением после использования метода divade.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Внутри catch с throw e; вы отбрасываете уже пойманную ошибку.Вот почему это

int c = a / b;

не выполняется.Если вы удалите

throw e;

, вы получите 6 в результате.

0 голосов
/ 06 декабря 2018

Поскольку вы генерируете исключение всякий раз, когда b больше 0, исключение выдается, когда вы запускаете его со значением 2. Таким образом, результат никогда не обновляется, и в конце вашей программы отображается 0.

Чтобы получить правильный вывод, вам нужно изменить выражение if в методе split, чтобы не создавать исключение в любое время, когда b больше 1.

...