2013-02-10 151 views
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; 
    } 
} 

在此先感谢!

回答

10

您的测试:

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

否则您已经创建了大小-1的阵列中,当:

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

,你应该在下面的语句中分配该长度的数组前完成numberSet.length = 0。这很奇怪。因此,请将您的if statement作为您方法中的第一个声明。

13

要检查数组为null:

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"); 
} 
+0

这些不是什么导致OP的问题。他正在得到一个异常,因为他在使用它之前没有测试长度......并且通过尝试创建长度为“-1”的数组来使用它。 – 2013-02-10 07:20:31

2

你可以使用yourArray.length到findout在数组中元素的数目。

在做yourArray.length之前确保yourArray不为空,否则最终将以NullPointerException结束。

1

你的问题是,你没有测试阵列的长度,直到为时已晚。

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

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