Java 尝试捕获空数组和空数组

Java 尝试捕获空数组和空数组,java,arrays,sorting,null,try-catch,Java,Arrays,Sorting,Null,Try Catch,我试图在我创建的方法中执行异常捕获: 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 m

我试图在我创建的方法中执行异常捕获:

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;
    }

空数组已通过验证,但未显示消息。空值也一样。试图在数组中使用Inter.parseInt解析null。当异常发生时,我需要如何修改屏幕上的try catch to diplay消息?

您误解了它的工作原理。如果您想对表达式为真的情况做出响应,那么异常是不相关的,也不会帮助您。尝试以下方法:

if (array.length == 0) System.out.println("An array need to be filled");
或者,只需做自己的事情,然后在事后对问题做出响应-导致问题的语句会在try中出现,不需要检查表达式:

try {
    System.out.println("The first item is " + array[0]);
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("An array need to be filled");
}
这里的
数组[0]
表达式在执行时会抛出该异常。因为它发生在一个try块内,所以执行跳转到匹配的catch块。

表达式
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循环<在循环开始之前,code>i=0
已大于
arrayToSort.length-1

公共静态int[]排序(int[]数组){
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;
}
如果(array==null)抛出新的NullPointerException(“nullptr”); 如果(array.length==0)抛出新的ArrayIndexOutOfBoundsException(“length=0”); if(array.length==1){ 返回数组; } int[]arrayToSort=array.clone(); for(int i=0;i

我不确定您还想要什么。

在您的方法中,首先使用这个:if(array==null)。当.length和.empty等数组方法已经为null时,不能调用它们。Thx Stefan(dzięki?)。你对该方法的工作方式提出了非常好的观点。我认为你不理解Jakub想要实现的目标,无论如何,你的答案(现在)是完全正确的,并且描述了我们通常如何捕获异常,因此我投了+1票。
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;
}