如何将计数索引的值分配给ArrayList?不是计数指数的对象

时间:2015-11-24 22:51:03

标签: java arraylist

对于我的项目,我需要一个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

提前致谢。

3 个答案:

答案 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}}