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

4 回答 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");
}
于 2013-02-10T06:27:52.323 回答
10

你的测试:

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

应该在您在以下语句中分配该长度的数组之前完成:

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

否则-1,当numberSet.length = 0. 这很奇怪。因此,将您if statement作为方法中的第一个语句移动。

于 2013-02-10T06:28:49.553 回答
2

你可以用它yourArray.length来找出数组中元素的数量。

在做之前确保 yourArray 不为空yourArray.length,否则你最终会得到NullPointerException.

于 2013-02-10T06:27:59.400 回答
1

您的问题是您没有测试数组的长度,直到为时已晚。

但我只想指出,解决这个问题的方法是阅读堆栈跟踪。

异常消息将清楚地告诉您正在尝试创建一个长度为 -1 的数组,并且跟踪将准确地告诉您代码的哪一行正在执行此操作。剩下的就是简单的逻辑......回到为什么你使用的长度是-1。

于 2013-02-10T07:25:28.323 回答