如何检查一个数组是否为空?

14
我写了一个程序,如果数组集是{1, 3, 6, 7, 12},它将返回两个数字之间的最小差距。换句话说,它将首先找到3和1、6和3、7和6以及12和7之间的差异。在计算它们的差异之后,它将返回最小的差异,在我们的例子中为1,因为6-7=1。 例如,如果给定数组集{60},该程序将返回0。 现在,如果我们的数组集是{},什么都没有,它也将返回0。然而,我无法让我的程序返回0!它会抛出异常。我错过了什么?我该如何解决这个问题?以下是我的程序:
public static void main(String[] args) {
    int[] numberSet = {1, 3, 6, 7, 12};
    //int[] numberSet = {};
    System.out.println(minGap(numberSet));      
}

public static int minGap(int[] numberSet) {
    int[] differenceArray = new int[numberSet.length-1];
    int smallestNum = 0;
    if (numberSet.length < 2) {
        return 0;
    }
    else {
        for(int i = 0; i < numberSet.length-1; i++) {
            differenceArray[i] = numberSet[i+1] - numberSet[i]; 
        }       
        Arrays.sort(differenceArray);
        smallestNum = differenceArray[0];
        return smallestNum;
    }
}

提前感谢!

4个回答

13

检查数组是否为空:

int arr[] = null;
if (arr == null) {
 System.out.println("array is null");
}

检查数组是否为空:

arr = new int[0];
if (arr.length == 0) {
 System.out.println("array is empty");
}

这些不是导致 OP 问题的原因。他之所以会出现异常,是因为他在使用长度之前没有进行测试...而他试图通过创建一个长度为“-1”的数组来使用它。 - Stephen C

10

您的测试:

if (numberSet.length < 2) {
    return 0;
}

在下面的语句中分配一个这样长度的数组之前应该完成以下操作:

int[] differenceArray = new int[numberSet.length-1];

否则,当 numberSet.length = 0 时,您就已经创建了一个大小为-1的数组。这相当奇怪。因此,请将您的if语句移动到方法中的第一条语句。


2

您可以使用yourArray.length来查找数组中元素的数量。

在执行yourArray.length之前,请确保yourArray不为null,否则您将遇到NullPointerException


1
你的问题在于直到太晚才测试数组的长度。
但我想指出解决这个问题的方法是阅读堆栈跟踪。
异常消息将清楚地告诉您正在尝试创建长度为-1的数组,跟踪将告诉您确切地哪行代码正在执行此操作。其余部分很简单...回溯到您使用的长度为-1的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接