我创建了一个arraylist并在DO While循环中添加了元素(字符串数组)。我使用以下内容添加元素:
tempList.add(recordArray); //- recordArray is a String[]
//ArrayList<String[]> tempList = new ArrayList<String[]>();// is declared in the activity before onCreate method
如果我使用以下代码检查DO WHILE循环内的数组:
aStringArray = tempList.get(index);
Log.i(TAG,"aStringArray[0] = " + aStringArray[3]);
index++;
我为添加到arrayList的3个数组元素中的每一个都获得了正确的字符串。
问题是当我尝试在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
我已经搜遍了所有的答案,但找不到答案。希望有人可以提供帮助。
非常感谢
克莱夫
答案 0 :(得分:2)
我强烈怀疑你每次进行循环时都会添加相同的字符串数组。您应该每次都创建一个 new 字符串数组。
不要忘记该列表仅包含引用。所以我的猜测是你的代码看起来像这样:
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个不同的数组。
答案 1 :(得分:0)
你还没有发布你的代码,所以我不得不猜测,但这听起来好像是你多次向列表中添加String[]
,并且只是在循环的每次迭代中修改单个数组实例。
您需要确保在每次迭代时实际分配一个新数组。例如:应该有类似的行:
recordArray = new String[size];
在你的循环中。