我正在为一个项目工作,我被要求获取.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。只有当数组确实具有null元素时才会发生这种情况,但我想我无法弄清楚如何阻止该方法尝试访问null元素。
答案 0 :(得分:5)
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];
}
可以解决问题。但是你应该考虑使用Collections(查看ArrayList)来处理动态输入长度的集合/数组。
答案 1 :(得分:3)
我无法弄清楚如何阻止该方法尝试访问null元素。
在执行将其用作值的任何内容之前,请检查数组的特定索引是否等于null
。