我遇到需要填充对象数组的情况。
这是我的代码:
final class ObjectClass
{
List<ObjectClass> array;
private int data;
ObjectClass(int data)
{
this.data = data;
}
public void fillArray() {
array = new LinkedList<>();
for(int i = 0;i < array.size();i++)
{
data++;
array.add(new ObjectClass(data));
}
}
}
我对此没有任何结果。这有什么问题?
这样添加是否有效:array.add(new ObjectClass(data))
?
在这种情况下,结果和逻辑毫无意义。我只是想让ObjectClass的数组具有不同的数据值。我看到,有人使用了一个引用变量并将其存储在一个数组中,但只有创建对象才有效吗?
添加打印方法:
public void display() {
for(ObjectClass e : array) {
System.out.println(e);
}
}
答案 0 :(得分:4)
这里没有发生任何事情的原因是:
for(int i = 0;i < array.size();i++)
之前的行,你刚刚创建了array
所以它仍然是空的 - 因此,循环的主体根本不会被执行。
答案 1 :(得分:1)
每当你打电话给fillArray
时,你就是在数组中销毁数据(不过它已经在那里发现了):
array = new LinkedList<>();
首先,将字段更改为使用预先初始化,这样就不会在每次方法调用时覆盖字段。
List<ObjectClass> array = new LinkedList<>();
现在,为您的方法。您不进入循环,因为array
始终为空。根据您要完成的任务,您应该通过该对象,或者创建 n 次的副本。
public void fillArray(int times) {
for(int i = 0;i < times; i++) {
data++;
array.add(new ObjectClass(data));
}
}
最后,请注意,如果循环 工作,data
和array.size()
将是等效的(只要您没有删除任何内容)。我重新考虑该变量的目的/意图。
答案 2 :(得分:0)
将 List<ObjectClass> array
声明为static
,它会通过创建Class variable
而不是对象级别来实现您想要实现的目标强>
答案 3 :(得分:0)
问题是array
(顺便说一下它实际上不是一个数组 - 它的名字错误)最初的大小为0,所以该方法什么都不做。
您忘记考虑要用“填充”数据结构的数字。