我正在为类做一个项目,要求我获取一个.txt文件,将数据聚合到不同的对象中,然后根据共享特征对该列表进行排序。我的说明是使程序能够导入多达 200 行文本。
我已经成功地实现了导入.txt文件的程序,给定一个定义的数组大小(如果.txt文件有 6 行,一个包含 6 个元素的数组(,但我需要能够定义它多达 200 个元素。当超出实际元素的数量(例如 6(时,它会抛出 NullPointerException。我似乎找不到这可能发生的位置,因为我的代码至少在视觉上出现,以处理可能发生的任何实例。以下是出现问题的地方:
public Solid[] solids;
public int length;
public Measurer m;
public int h;
public SolidList(int size) {
length = 0;
solids = new Solid[size];
}
public void addSorted(Solid foo, Measurer m) {
int k = 0;
if (length != 0) {
while ((k < length) && foo.greaterThan(solids[k], m))
++k;
for (int j = length; j > k; --j)
solids[j] = solids[j - 1];
}
solids[k] = foo;
++length;
}
具体来说,Eclipse 在 addSorted(...)
的 while 循环中遇到了 NullPointerException。仅当数组确实具有空元素时,才会发生这种情况,但我想我无法弄清楚如何防止该方法尝试访问空元素。
if (length != 0) {
while ((k < length) && solids[k] != null && foo.greaterThan(solids[k], m))
++k;
if(solids[k] == null) {
return;
}
for (int j = length; j > k; --j)
solids[j] = solids[j - 1];
}
可能会解决问题。但是你应该真正考虑使用集合(看看ArrayList(来处理动态输入长度的集合/数组。
我不知道如何防止该方法尝试访问空元素。
在执行任何将其用作值的操作之前,请检查数组的特定索引是否等于 null
。