<小时/> 我写了一个循环,在其中我用Sum对象填充数组。一切正常,但是一旦循环进入下一次迭代,它就会覆盖数组的第一个索引。
<小时/> 我试着看看我的问题是否存在于另一段代码中(例如我的Sum类)。但找不到任何会扰乱循环的东西 我试图找到具有相同名称的其他变量(即使在其他方法中,因为我绝望)并且看看我是否可能在其他地方更改了我的迭代器。我找不到任何相关的东西。
public Task(Object[] parameters)
{
this.number_of_sums = Integer.parseInt((String)parameters[0]);
this.variables_per_sum = Integer.parseInt((String)parameters[1]);
this.sum_parameters = new Object[this.variables_per_sum];
this.sums = new Sum[this.number_of_sums];
int z = 0;
for(int i = 0; i < this.number_of_sums; i++)
{
int x = 0;
for(int j = (2 + z); j < ((this.variables_per_sum + 2) + z); j++)
{
this.sum_parameters[x] = parameters[j];
x++;
}
this.sums[i] = new Sum(this.sum_parameters);
System.out.println("Index 0: "+sums[0]); //1st iteration: 1 + 1 //2nd iteration: 2 - 1
System.out.println("Index 1: "+sums[1]); //1st iteration: null //2nd iteration: 2 - 1
z += this.variables_per_sum;
}
}
<小时/> 我期待输出1 + 1和2 - 1.然而我得到以下内容:2 - 1和2 - 1,当我完成。
如果有人发现任何我做错了或希望在我身边看到更多信息或代码,请说明。提前谢谢。
答案 0 :(得分:3)
我将假设Sum
类不存储它的总和,而是在需要的时候从它构造的数组中计算它。
看起来所有Sum
个对象都将共享同一个数组 - 每次构造Sum
时都会传递相同的引用。此外,每次循环j
时,都会覆盖该数组的内容。
所以当一切都完成后,所有的总和都是一样的。
您应该能够通过为每个Sum
提供不同的sum_parameters
来解决这个问题:
public Task(Object[] parameters)
{
this.number_of_sums = Integer.parseInt((String)parameters[0]);
this.variables_per_sum = Integer.parseInt((String)parameters[1]);
this.sums = new Sum[this.number_of_sums];
int z = 0;
for(int i = 0; i < this.number_of_sums; i++)
{
Object[] sum_parameters = new Object[this.variables_per_sum];
int x = 0;
for(int j = (2 + z); j < ((this.variables_per_sum + 2) + z); j++)
{
sum_parameters[x] = parameters[j];
x++;
}
this.sums[i] = new Sum(sum_parameters);
System.out.println("Index 0: "+sums[0]); //1st iteration: 1 + 1 //2nd iteration: 2 - 1
System.out.println("Index 1: "+sums[1]); //1st iteration: null //2nd iteration: 2 - 1
z += this.variables_per_sum;
}
}
答案 1 :(得分:1)
每个Sum
个对象都是以this.sum_parameters
作为参数构建的:
this.sums[i] = new Sum(this.sum_parameters);
在外部循环的每次迭代中修改sum_parameters
时,它会在围绕引用的周围构建的对象内部发生变化。
您应在每个sum_parameters
对象中制作Sum
的内部副本。