элементы массива дублированы - PullRequest
0 голосов
/ 11 апреля 2011

Я создал массив и добавил к нему элементы (строковый массив) в цикле 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++;

я получаю правильную строку для каждого из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

Я искал ответ, но не могу его найти.надеюсь, кто-то здесь может помочь.

высоко ценится

Клайв

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Я сильно подозреваю, что вы добавляете один и тот же массив строк каждый раз, когда проходите цикл.Вы должны каждый раз создавать новый массив строк.

Не забывайте, что список содержит только ссылок .Поэтому я предполагаю, что ваш код выглядит следующим образом:

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);
}

В результате получается ArrayList из 10 идентичных ссылок.Вместо этого вам нужно:

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 голосов
/ 11 апреля 2011

Вы не опубликовали свой код, поэтому я должен догадаться, но похоже, что вы добавляете один и тот же String[] в свой список несколько раз и просто изменяете этот единственный экземпляр массива на каждой итерации цикла.

Вы должны убедиться, что вы фактически выделяете новый массив на каждой итерации. например: там должна быть строка что-то вроде:

recordArray = new String[size];

внутри вашей петли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...