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