Java中多态性、继承和数组排序的练习
我正在为一个类做一个项目,要求我获取一个.txt文件,将数据聚合成不同的对象,然后根据共享的特征对列表进行排序。我的指令是使程序能够导入多达200行文本 我已经成功地实现了导入.txt文件的程序,给定了定义的数组大小(如果.txt文件有6行,则为6个元素的数组),但我需要能够定义多达200个元素。当超过实际元素的数量时,例如6,它抛出一个NullPointerException。我似乎找不到这可能发生在哪里,因为我的代码出现了,至少在视觉上,以处理任何可能发生这种情况的实例。以下是出现问题的地方:Java中多态性、继承和数组排序的练习,java,arrays,sorting,polymorphism,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;
}
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,但在这个类中我们仅限于使用数组。可以理解,但这会让事情变得更难。谢谢你的帮助!没问题。你看到我所做的两个改变(希望)是如何解决你的问题的了吗?