【发布时间】:2015-03-04 17:24:14
【问题描述】:
我自己似乎无法解决这个问题。我有一个二维数组,
字符串收集器[名称][#ofstuff]
我正在尝试使用此代码对其进行排序:
Arrays.sort(Collectors, new Comparator<String[]>() {
public int compare(String[] a1, String[] a2 )
{
return a1[1].compareTo(a2[1]);
}
});
我是比较新手,尝试阅读大量有关它的文档,但并不真正理解它。 排序函数是否只是获取我想要比较两个字符串的信息然后执行它的操作?
由于某种原因,这段代码每次被读取时都会抛出 NullPointerException。
线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 在 p1.P1$1$1.compare(P1.java:155) (这是返回语句) 在 p1.P1$1$1.compare(P1.java:152) (这是 Arrays.sort 行)
所以我正在尝试按数组的第二个维度,即 # of stuff 对数组进行排序。我应该尝试将这些值转换为 int 并比较 int 吗?
以防人们说不要使用数组,我必须使用它们来完成这项任务,我只是碰巧使用 2d 数组而不是 1d 使所有事情都变得困难了 1000 倍。
编辑:哎呀,我可能在解释二维数组时犯了一个错误。抱歉,我整天都在忙这个嘿嘿。
String Collectors[][] = new String[100][2];
然后我有一些添加到那里的代码,我想开始按第一个维度的第二个索引进行排序。我想我得先把所有的索引都填满,这样就可以补救空指针异常了?
解决方案
在尝试排序之前数组必须是满的!谢谢 ILoveCoding ♥
【问题讨论】:
-
这意味着您的数组的某些元素为空。你如何初始化它?
-
请提供一个您希望排序的小型二维数组的示例,您希望排序的结果是什么,以及为什么。你的解释对我来说没有多大意义。您可能对二维数组的工作原理感到困惑,或者您在谈论它们时可能只是使用了错误的术语。
-
您实际上想使用什么作为排序标准?我怀疑您打算比较
a1.length和a2.length(从而按长度对数组进行排序)。a1[1]将默认为null,除非你用一些String初始化它,a2[1]也是如此。另外,你怎么知道这两个数组至少有两个元素? -
谢谢大家,所以要纠正这个错误我必须先填充数组才能排序? (我有一个数组扩展方法,我可以使用它来扩展它,然后每次它被填充,而不是立即让它变大)例如索引 [0][0] = Bob 和索引 [0][1] = 5 index [1][0] = Sam index [2][1] = 10 我想根据保存数字的索引对其进行排序,同时仍然保持名称和数字之间的链接。
-
从您上次的评论看来,您正试图用数组伪造对象。但是真的很难猜出你想要做什么。请更新您的问题以至少包含示例输入和所需的输出。另请参阅“How to create a Minimal, Complete, and Verifiable example”。
标签: java arrays nullpointerexception compare comparator