English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Как циклить программу после возникновения исключительной ситуации в Java?

Чтение ввода и выполнение необходимых вычислений в методе. Код, вызывающий исключение, остается в блоке try, а все возможные исключения ловятся в блоке catch. В каждом блоке catch отображается соответствующее сообщение, и затем вызывается этот метод снова.

Пример

В следующем примере у нас есть массив из 5 элементов, мы принимаем два целых числа от пользователя, представляющие позиции в массиве, и выполняем с ними деление. Если вводимые позиции больше 5 (длина массива), возникает исключение ArrayIndexOutOfBoundsException, и если выбрана позиция знаменателя 4 (т.е. 0), возникает ArithmeticException.

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

import java.util.Arrays;
import java.util.Scanner;
public class LoopBack {
   int[] arr = {10, 20, 30, 2, 0, 8};
   public static void getInputs(int[] arr){
      Scanner sc = new Scanner(System.in);
      System.out.println("Выберите числитель и знаменатель (не 0) из этого массива (введите позиции от 0 до 5)");
      int a = sc.nextInt();
      int b = sc.nextInt();
      try {
         int result = (arr[a]) / (arr[b]);
         System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result);
      catch(ArrayIndexOutOfBoundsException e) {
         System.out.println("Ошибка: Вы выбрали позицию, которая не находится в массиве: ПОПРОБУЙТЕ ЕЩЕ РАЗ");
         getInputs(arr);
      }
         System.out.println("Ошибка: Знаменатель не должен быть нулём: ПОПРОБУЙТЕ ЕЩЕ РАЗ");
         getInputs(arr);
      }
   }
   public static void main(String [] args) {
      LoopBack obj = new LoopBack();
      System.out.println("Массив: " + Arrays.toString(obj.arr));
      getInputs(obj.arr);
   }
}

Результат вывода

Массив: [10, 20, 30, 2, 0, 8]
Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)
14
24
Ошибка: Вы выбрали позицию, которая не находится в массиве: ПОПРОБУЙТЕ ЕЩЕ РАЗ
Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)
3
4
Ошибка: Знаменатель не должен быть нулём: ПОПРОБУЙТЕ ЕЩЕ РАЗ
Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5)
0
3
Результат 10/2: 5
Основной учебник
Рекомендуем к просмотру