Попробуйте Catch null и пустой массив - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь выполнить перехват исключений в методе, который я сделал:

public static int[] sort(int[] array) {
        if (array.length == 1) {
            return array;
        }
        int[] arrayToSort = array.clone();
        for (int i = 0; i < arrayToSort.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arrayToSort.length; j++) {
                if (arrayToSort[j] < array[i]) {
                    if (arrayToSort[j] < arrayToSort[minIndex])
                        minIndex = j;
                }
            }
            if (i != minIndex) {
                Swap.selectionSwap(arrayToSort, minIndex, i);
            }
        }
        return arrayToSort;
    }

Я хочу проверить и отловить исключение для: 1) длина массива равна 0 2) нуль внутри массива

Я пытался сделать это в начале моего метода:

      try {
        if(array.length == 0);
    } catch (ArrayIndexOutOfBoundsException exceptionForAnEmptyArray) {
        System.out.println("an array need to be filled");
    }
    try {
           array.equals(null);
    }
    catch (NullPointerException e) {
        System.out.println("An array should contain the numbers");
    }

Пустой массив прошел проверку, но сообщение не появилось. То же самое с нулем. Попытался разобрать ноль, используя Inter.parseInt внутри массива. Как мне нужно изменить сообщение try для отображения сообщения на экране всякий раз, когда возникает исключение?

Ответы [ 3 ]

1 голос
/ 08 февраля 2020

Выражение if(array.length == 0); проверяет, равна ли длина нулю, но ничего не делает. Возможно, вы хотели написать:

try {
    if (array == null) {
        throw new NullPointerException("the array is null");
    }
    if (array.length == 0) {
        throw new ArrayIndexOutOfBoundsException("the array is empty");
    }

    // process the content of the array here

} 
catch (Exception e) {
    System.out.println("Cannot process the array because:");
    e.printStackTrace();
}

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

Однако NullPointerException будет сгенерировано автоматически, как только вы попытаетесь получить доступ к содержимому массива, в вашем случае это будет вызов array.length.

Также ArrayIndexOutOfBoundsException будет сгенерирован автоматически, если вы попытаетесь получить доступ к индексу массива, который не существует. Но если массив пуст, то никакой ошибки не произойдет, потому что ваш for-l oop не будет выполнен. i=0 уже больше, чем arrayToSort.length-1, до запуска l oop.

1 голос
/ 08 февраля 2020
public static int[] sort(int[] array) {
    if(array == null) throw new NullPointerException("nullptr");
    if(array.length == 0) throw new ArrayIndexOutOfBoundsException("length equals 0");

    if (array.length == 1) {
        return array;
    }
    int[] arrayToSort = array.clone();
    for (int i = 0; i < arrayToSort.length - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < arrayToSort.length; j++) {
            if (arrayToSort[j] < array[i]) {
                if (arrayToSort[j] < arrayToSort[minIndex])
                    minIndex = j;
            }
        }
        if (i != minIndex) {
            Swap.selectionSwap(arrayToSort, minIndex, i);
        }
    }
    return arrayToSort;
}

Я не уверен, что еще вы могли бы после.

0 голосов
/ 08 февраля 2020

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

if (array.length == 0) System.out.println("An array need to be filled");

В качестве альтернативы, просто сделайте свое дело, а затем ответьте на проблему ПОСЛЕ - предложение, которое вызывает проблему, входит в попытку, и нет необходимости в проверочном выражении:

try {
    System.out.println("The first item is " + array[0]);
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("An array need to be filled");
}

Здесь выражение array[0] при исполнении выдает это исключение. Поскольку это происходит в блоке try, выполнение переходит к соответствующему блоку catch.

...