2011-04-11 79 views
0

我创建了一个数组列表,并在DO While循环中向它添加了元素(字符串数组)。我用下面的添加元素:arraylist复制的元素

tempList.add(recordArray); //- recordArray is a String[] 

//ArrayList<String[]> tempList = new ArrayList<String[]>();// is declared in the activity before onCreate method 

如果我WHILE循环使用以下代码检查DO中的阵列:

aStringArray = tempList.get(index); 
Log.i(TAG,"aStringArray[0] = " + aStringArray[3]); 
index++; 

我得到正确的字符串的每个添加的3种数组元素的到arrayList。

问题是,当我尝试在DO WHILE循环外使用相同的代码时,为3次迭代中的每一次都显示相同的字符串。

所以总结一下,在do while循环,我得到如下:

1st iteration - aStringArray[3] - displays "100350 
2nd iteration - aStringArray[3] - displays "100750 
3rd iteration - aStringArray[3] - displays "100800 

的DO之外WHILE循环,我得到如下:

1st iteration - aStringArray[3] - displays "100800 
2nd iteration - aStringArray[3] - displays "100800 
3rd iteration - aStringArray[3] - displays "100800 

我已经找遍了为一个答案,但无法找到一个。希望这里有人能帮忙。

大加赞赏

克莱夫

+1

你能发布代码吗?我不能真正按照你在这里说的话。 – James 2011-04-11 19:46:38

+1

你可以给我们你在循环外使用的**特定**代码来显示这些迭代吗? – QuantumMechanic 2011-04-11 19:46:54

回答

2

我强烈怀疑你添加每次经过循环时间相同字符串数组。您应该每次创建一个新的字符串数组。

不要忘记,列表只包含引用。所以我的猜测是,你的代码如下所示:

ArrayList<String[]> tempList = new ArrayList<String[]>(); 
String[] recordArray = new String[4]; 

for (int i = 0; i < 10; i++) 
{ 
    recordArray[0] = "a" + i; 
    recordArray[1] = "b" + i; 
    recordArray[2] = "c" + i; 
    recordArray[3] = "d" + i; 
    tempList.add(recordArray); 
} 

与10的ArrayList相同的标记结束。相反,你要这样:

ArrayList<String[]> tempList = new ArrayList<String[]>(); 

for (int i = 0; i < 10; i++) 
{ 
    String[] recordArray = new String[4]; 
    recordArray[0] = "a" + i; 
    recordArray[1] = "b" + i; 
    recordArray[2] = "c" + i; 
    recordArray[3] = "d" + i; 
    tempList.add(recordArray); 
} 

你有10个列表中的不同数组的引用的方式。

+0

非常感谢。那是我的问题。我完全困惑的事实是,当我尝试从列表中提取字符串时,在Do-WHILE循环中它完美地工作,但当我使用相同的循环提取字符串但在DO-WHILE循环之外时,我得到了相同的字符串反复。非常感谢您的帮助 – idig 2011-04-12 08:01:52

0

你还没有发布你的代码,所以我必须猜测,但它听起来像你多次添加相同的String[]到你的列表中,并且只是在你的循环的每次迭代中修改单个数组实例。

您需要确保在每次迭代中实际分配一个新数组。例如:应该有这样一行:

recordArray = new String[size]; 

在你的循环中。

+0

非常感谢。那是我的问题。我改变了我的代码,它的工作完美。再次感谢 – idig 2011-04-12 08:02:55