2015-04-08 2 views
-2
Scanner input = new Scanner(System.in); 
ArrayList<String[]> contact = new ArrayList<String[]>(); 
String[] record = new String[2]; 
int x1=1; 

while(x1==3){ 

    for(int i=0;i<2;i++){ 
     record[i]=input.nextLine(); 
    } 
    contact.add(record); 
    x1++; 
} 

Я попробовал распечатать список и обнаружил, что список содержит последнюю запись три раза. Первые две записи (заданные во время первых двух циклов) заменяются третьей записью.Добавление строки [] в ArrayList, используемой для цикла

+0

Вы всегда итерации от индекса 0. Таким образом, вы всегда заменяете все строки последней строкой. – Zlopez

ответ

-3

Вы должны были инициализировать массив строк внутри цикла while. Так что вы можете избежать переустановки старых массивов в списке. Как это.

while (x1 <= 3) { 
     String[] record = new String[2]; 
     for (int i = 0; i < 2; i++) { 
      record[i] = input.nextLine(); 
     } 
     contact.add(record); 
     x1++; 
    } 
+0

Зачем голосовать? Могу я узнать причину? Этот код был принят вопрошающим. – Rajesh

3

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

while(x1<=3){ 
    String[] record = new String[2]; 
    for(int i=0;i<2;i++){ 
     record[i]=input.nextLine(); 
    } 
    contact.add(record); 
    x1++; 
} 

Я также предположил, что while(x1==3) была опечатка, и вы имели в виду <=.

0

Я думаю, что у вас есть недостаток в коде. Я попытался обратиться к нему ниже;

while(x1<=3){ 
    //create new string array 
    String[] record = new String[2]; 

    for(int i=0;i<2;i++){ 
     record[i]=input.nextLine(); 
    } 
    contact.add(record); 
    x1++; 
} 

Без повторного использования массива «запись» у вас будет ссылка на оригинал, добавленный три раза.

EDIT: увидел, что у Эрана есть то же самое, но я пропустил сравнение < = вместо ==. Если вы использовали ==, то вы не смогли бы ввести цикл, потому что условие было бы неудачно изначально

Смежные вопросы