【发布时间】:2013-11-17 22:42:31
【问题描述】:
完整代码见:https://skydrive.live.com/redir?resid=7B7D2F11B13EF9C9!54468&authkey=!AD4fD8sGgc7oJIE
这是代码的一部分:
g_sorted = 0;
for (int l_loop = 0; l_loop < l_length; l_loop++)
{
if (!l_IntegerArray[l_loop].equals(g_exclude))
{
g_tag[g_sorted] = l_loop;
g_tosort_Integer[g_sorted] = l_IntegerArray[l_loop];
g_sorted++;
}
} // for (int l_loop = 0; l_loop < p_toSort; l_loop++)
Arrays.sort
(g_tag, 0, g_sorted, new Comparator<Integer>()
{
public int compare(Integer i1, Integer i2)
{
return Integer.compare(g_tosort_Integer[i1], g_tosort_Integer[i2]);
}
}
);
g_tosort_Integer、g_tag、g_tosort_Integer 是“整数”。 g_exclude 用于排除不能属于排序的项目。
当没有项目被排除(没有项目的值等于 g_exclude 或 if 语句被注释)时,一切正常。
当排除 1 个或多个项目时,我会收到 NullPointerException:
Exception in thread "main" java.lang.NullPointerException
at TestSort$1.compare(TestSort.java:53)
at TestSort$1.compare(TestSort.java:50)
at java.util.TimSort.binarySort(TimSort.java:265)
at java.util.TimSort.sort(TimSort.java:190)
at java.util.Arrays.sort(Arrays.java:727)
at TestSort.<init>(TestSort.java:48)
at TestSort.main(TestSort.java:71)
有人可以向我解释一下吗?谢谢。
【问题讨论】:
-
你所有的变量名都非常规且难以阅读。
-
在此处发布任何相关代码,请不要在链接中。
-
i1, i2, g_tosort_Integer, g_tosort_Integer[i1] 或 g_tosort_Integer[i2] 可以为空。使用调试器或日志语句找出是哪一个,然后修复错误。
-
^ 正是@JBNizet 所说的。
-
@Sotirios Delimanolis:变量名是简单的英文并且易于阅读。我不知道你所说的非常规是什么意思。
标签: java arrays sorting nullpointerexception comparator