对于我的项目,我需要一个ArrayList,它在do-while-loop中保存一个值(如果if语句变为true)。循环之后,列表应打印出所需的值和各种值。但是,所有值都等于计数索引的最后一个值。
在搜索解决方案期间(没有成功),我想说,ArrayList应该只用于存储对象。这可以以某种方式解释,ArrayList已保存对象,而不是所需的值。不过,我需要一个带有嵌套循环的循环的动态列表,这个循环处理超过500次,并且需要多个if语句,因此需要ArrayList。
如何解决这个问题?任何替代方案?
一个简单的脚本来描述我的问题:
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i1=0;
int i2=0;
ArrayList<int[]> iArray = new ArrayList<int[]>();
int[] x = new int[2];
do{
i1++;
do{
i2++;
x[0] = i1;
x[1] = i2;
iArray.add(x);
}while(i2<15);
}while(i1<15);
for(int[] i : iArray){
System.out.println("line 1: " + i[0] + " line 2: " + i[1]);
}
}
}
控制台输出:
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
line 1: 15 line 2: 29
提前致谢。
答案 0 :(得分:1)
您只创建一个数组,然后多次添加该数组。删除早期声明,并在循环中声明(并初始化)它。像,
int[] x = {i1, i2};
// x[0] = i1;
// x[1] = i2;
iArray.add(x);
你可以在一行上没有x
,
iArray.add(new int[] {i1, i2});
答案 1 :(得分:0)
您正在重复使用相同的数组。您使用int[] x = new int[2];
创建一次,然后在执行iArray
时将同一对象的引用插入iArray.add(x);
您可以在分配数值之前移动数组的创建来解决您的问题。这样,您将始终有一个新实例可以处理并添加到iArray
。
答案 2 :(得分:0)
您可能对使用Java 8流实现此目的的更简单方法感兴趣:
{{1}}