0

我正在为一个类项目工作,我被要求获取一个 .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(...). 只有当数组确实有空元素时才会发生这种情况,但我想我无法弄清楚如何阻止该方法尝试访问空元素。

4

2 回答 2

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];
}

或许能解决问题。但是您应该真正考虑使用集合(查看 ArrayList)来处理动态输入长度的集合/数组。

于 2012-05-01T21:56:25.320 回答
3

我不知道如何阻止该方法尝试访问空元素。

null在执行任何将其用作值的操作之前检查数组的特定索引是否等于。

于 2012-05-01T21:54:07.283 回答