练习 Java 中的多态性、继承性和数组排序



我正在为类做一个项目,要求我获取一个.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

最新更新