2009-02-02 38 views
2

这是一个相当基本的Java问题基本数组初始化和排序问题

我有一个包含字符串数组,我想使用java.util.Arrays.sort

当我写

String[] myArray = {"A","B","C"}; 
java.util.Arrays.sort(myArray); 
排序

它得到正确排序

然而,当我有

String[] myArray = new String[10]; 
myArray[0] = "A"; 
myArray[1] = "B"; 
myArray[2] = "C"; 

java.util.Arrays.sort(myArray); 

排序抛出一个NullReferenceException

我敢肯定它的东西很愚蠢的,我只是不明白现在。我必须新建字符串,因为硬编码默认值不会在任何地方获取任何人。

回答

7

初始化第二个数组时,您只初始化前三个元素。其他元素初始化为空,因此不能排序。

1

会发生什么情况是,当您有10个项目的数组时,其他项目未初始化。因此,当排序算法工作时,它会尝试获取字符串的值,但不会得到任何结果,并引发异常。

您需要确保您不要尝试排序比您放置的空间更多空间的数组。

1

我认为,因为您使myArray存储10个元素,所以它(有效)在末尾添加7个空值,然后Arrays.sort()无法对空字符串排序空元素。

0

您将数组大小定义为10,但仅初始化3个索引。将阵列大小更改为3或初始化全部十个。

0

该数组有10个项目,但只有3个内部。所以,其他7个都是NULL。考虑使用ArrayList来代替。

+0

它会给你一个NullPointer,即使在ArrayList中,如果你有一个空对象在那里。因为它使用Arrays.sort()在某处。如果你的意思是别的,那就很好。没有 - 因为我不确定你的意思。 – 2009-02-02 04:53:32

1

它不能在初始创建阵列时存在的空字符串上工作。 为了避免显式地将所有内容设置为“”或者按照需要分配。

虽然不知道这是否是API级别的错误,因为它们可能已经迎合了空对象(我们在SQL order by中获得的方式),还是有更多的东西。

3

在源代码中,该方法使用compareTo()作为排序条件。显然,调用null上的compareTo()会引发NullPointerException。作为其在Java文档提到,

阵列中的所有元素都必须是相互 可比(即, e1.compareTo(e2)不得抛出 ClassCastException异常在任何元件 e1和e2 array)

当然这里不是关于ClassCastException,而是调用comapreTo()是显而易见的。

将帖子

P.S.从异常堆栈跟踪中找出这是你最好的选择。

3

请尝试以下内容来排序前三个元素。

Arrays.sort(myArray, 0, 3); 
-1

数组列表应该被使用,因为有3个元素不10.

,其它7个的阵列的元件将有一个空值。

这些空值在排序时会导致空指针问题。