我无法导入任何类。我试图创建一个方法,该方法在Unit[]类型的示例上调用,该方法名为ListOfUnits,具有私有字段(Unit[] units)(int size)。units是数组,其大小用于记录数组中有多少个元素。MilitaryUnit是Unit的一个子类。军事单位只有两种子类:弓箭手和战士。单位也包括其他与MilitaryUnit无关的子类。调用该方法时,应返回示例列表中仅包含MilitaryUnit的列表MilitaryUnit[]。
有人能解释一下我做错了什么吗?我的军队列表不应包含任何空元素
public class ListOfUnits {
private Unit[] Units;
private int size;
public ListOfUnits() {
this.Units = new Unit[1];
this.size = 0;
}
public MilitaryUnit[] getArmy() {
int newsize = 0;
for (int i = 0; i < this.size; i++) {
if (this.Units[i] instanceof MilitaryUnit) {
newsize++;
}
}
MilitaryUnit[] newlist = new MilitaryUnit[newsize];
int b = 0;
for (int h = 0; h < this.size; h++) {
if (this.Units[h] instanceof MilitaryUnit) {
newlist[b] = (MilitaryUnit) this.Units[h];
b++;
}
}
return newlist;
}
}
1条答案
按热度按时间lyr7nygr1#
为什么在构造函数中创建
new Unit[1]
,但将size
赋值为0?它应该是size
1或Unit[0]
,所以它可以组合在一起。此外,将大小保存在单独的变量中是不必要的。只需使用Units.length
,或者将字段重命名为小写(大写用于类名)并将其称为units.length
。如果数组是不可更改的,则可以将其声明为
final
。或者,如果它的大小发生了变化,可以使用List
或Set
这样的集合。无论如何,如果你这么喜欢数组,这里有一个保留数组方法的变体,但有一个精简的
getArmy()
方法:P.S.:类名
ListOfUnits
不仅是误导性的,因为它 Package 了一个数组,而不是一个列表,而且在类名中放置值类型也不好。为什么不是Units
?实际上,我想知道这样的类是否合理,因为它似乎没有做任何常规集合或数组以及getArmy()
在应用程序类中所做的过滤和类型转换的工具方法所不能做的事情。但这不在我们的讨论范围内。