尝试捕获空数组和空数组



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

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 catch 以在屏幕上显示消息?

你误解了它是如何工作的。如果您想执行某些操作来响应表达式为 true,则异常无关紧要,对您没有帮助。尝试类似操作:

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

或者,只需做您的事情,然后 AFTERward 响应问题 - 导致问题的语句在尝试中,并且不需要检查表达式:

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 块。

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

我不确定你还会追求什么。

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

相关内容

  • 没有找到相关文章

最新更新