2016-01-25 3 views
1

Вот мой код. В моем случае список переезжает. вывод должен быть [[1] [1,1] [1,2,1] [1,3,3,1] [1,4,6,4,1] Я получаю как - [[1, 4, 6, 4, 1], [1, 4, 6, 4, 1], [1, 4, 6, 4, 1], [1, 4, 6, 4, 1], [1, 4, 6, 4, 1]]. который является последним значением в цикле. в чем может быть проблемаArrayList внутри ArrayList становится переопределенным

int i,j; 
i=0; 
j=0; 
int a; 
Integer temp; 
a = 5; 
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> list1 = new ArrayList<Integer>(); 

for (i =0 ;i<a ;i++) 
{ 
    list1.clear(); 

    Integer number; 
    number = (int) Math.pow(11, i); 
    LinkedList<Integer> stack = new LinkedList<Integer>(); 
    while (number > 0) { 
     stack.push(number % 10); 
     number = number/10; 
    } 

    while (!stack.isEmpty()) { 
     temp = (stack.pop()); 
     list1.add(temp);  
    } 
    list.add(list1); 
} 
System.out.println("The arraylist contains the following elements: "+ list); 
+0

Создать новый экземпляр 'list1' внутри цикла. – user7

+0

Спасибо, сработало. list1.clear(); должен делать то же самое право на работу? –

+0

См. Мой ответ для деталей. – user7

ответ

0

Кажется, вы каждый раз очищаете массив List1. И у вас есть только один список массивов в списке больших массивов. Таким образом, вы получаете последние результаты, которые вы накладываете на внутренний аррайалист. Чтобы получить ожидаемые результаты, вы создаете несколько arraylists внутри цикла for.

0

Заменить list1.clear() с list1 = new ArrayList<Integer>();

В Java это вызов по значению. Но когда говорят list1, у вас есть только ссылка на list1.

Итак, когда вы повторяете, вы делаете list1.clear. Что он делает, удаляет список указал на Список ссылок1. Это очистит список, который вы добавили в list. Итак, что вы получаете в конце, это последнее содержание list1.

Для детального понимания см this