我编写了一个程序,如果数组设置为{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;
}
}
提前致谢!
答案 0 :(得分: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");
}
答案 1 :(得分:10)
你的考试:
if (numberSet.length < 2) {
return 0;
}
应该在以下语句中分配该长度的数组之前完成:
int[] differenceArray = new int[numberSet.length-1];
否则,您已经在-1
时创建了一个大小为numberSet.length = 0
的数组。这很奇怪。因此,将if statement
作为方法中的第一个语句移动。
答案 2 :(得分:2)
您可以使用yourArray.length
查找数组中的元素数量。
在执行yourArray.length
之前,请确保您的数组不为空,否则您最终会得到NullPointerException
。
答案 3 :(得分:1)
你的问题是你没有测试数组的长度,直到为时已晚。
但我只想指出解决这个问题的方法是阅读堆栈跟踪。
异常消息将清楚地告诉您正在尝试创建长度为-1的数组,并且跟踪将告诉您代码的哪一行正是这样做的。其余的是简单的逻辑...回到你使用的长度为-1的原因。