在Java中进行多态,继承和数组排序练习

时间:2012-05-01 21:48:42

标签: java arrays sorting polymorphism

我正在为一个项目工作,我被要求获取.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元素。

2 个答案:

答案 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