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

Java中多态性、继承和数组排序的练习,java,arrays,sorting,polymorphism,Java,Arrays,Sorting,Polymorphism,我正在为一个类做一个项目,要求我获取一个.txt文件,将数据聚合成不同的对象,然后根据共享的特征对列表进行排序。我的指令是使程序能够导入多达200行文本 我已经成功地实现了导入.txt文件的程序,给定了定义的数组大小(如果.txt文件有6行,则为6个元素的数组),但我需要能够定义多达200个元素。当超过实际元素的数量时,例如6,它抛出一个NullPointerException。我似乎找不到这可能发生在哪里,因为我的代码出现了,至少在视觉上,以处理任何可能发生这种情况的实例。以下是出现问题的地方

我正在为一个类做一个项目,要求我获取一个.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;
}
public Solid[]固体;
公共整数长度;
公共计量器m;
公共INTH;
公共列表(整数大小){
长度=0;
实体=新实体[尺寸];
}
公共无效添加排序(实心foo,测量器m){
int k=0;
如果(长度!=0){
而((k<长度)和&foo.大于(固体[k],m))
++k;
对于(int j=长度;j>k;--j)
固体[j]=固体[j-1];
}
固体[k]=foo;
++长度;
}
具体来说,Eclipse在
addSorted(…)
中的while循环中遇到了NullPointerException。只有当数组确实有空元素时才会发生这种情况,但我想我无法找出如何阻止该方法尝试访问空元素

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

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

if(length!=0){
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];
}
而((kk;--j) 固体[j]=固体[j-1]; }

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

首先,使用java集合处理原始数组的实例列表要好得多。在这种情况下,大小可能不是预先给定的。我是Gregory,请查看ArrayList->您还应该使用Collections.sort和comparator来进行排序->,java.util.comparator)您真的应该发布异常stacktrace。这样人们只是在猜测你的问题。显示的代码不会抛出NPE,除非foo为
null
。stacktrace可能会显示NPE是从
greaterThan
方法中抛出的。我在下面提到,这是一个家庭作业,我仅限于数组。我很想使用ArrayList,在这种情况下通常会这样做——我只是被限制这样做。啊,现在我明白了。那么,我将删除我的评论。我应该把它标记为家庭作业-对不起!这是我在这里的第一篇帖子,我还在学习规则。我会使用ArrayList,但在这个类中我们仅限于使用数组。可以理解,但这会让事情变得更难。谢谢你的帮助!没问题。你看到我所做的两个改变(希望)是如何解决你的问题的了吗?