Проблема с ArrayList не показывает правильный размер - PullRequest
1 голос
/ 04 сентября 2011

Итак, у меня есть этот код, который будет добавлять числа 1-9 в отдельные списки ArrayList, если ArrayList не существует.Однако, хотя я печатаю ArrayLists (и он получает все правильные числа), когда я печатаю .size ArrayList, он дает мне 1 вместо 9. Я надеюсь, вы понимаете мою проблему.Вот код:

ArrayList[][] tillatnaSiffror = new ArrayList[9][9];

    for(int i=0;i<9;i++){
        for(int ruta=0;ruta<9;ruta++){

            if(tillatnaSiffror[i][ruta] == null){
                for(int add=1;add<=9;add++){
                    tillatnaSiffror[i][ruta] = new ArrayList<Integer>();
                    tillatnaSiffror[i][ruta].add(add);
                    System.out.println(tillatnaSiffror[i][ruta]);
                }
                System.out.println(tillatnaSiffror[i][ruta].size());
            }
        }
    }

Это дает мне это (хотя, конечно, девять раз): [1][2][3][4][5][6][7][8][9]1

Теперь мне интересно, ПОЧЕМУ я получаю 1 вместо 9, когда япечать .size?

1 Ответ

8 голосов
/ 04 сентября 2011

Поскольку вы сбрасываете список в каждой итерации , выполняя

tillatnaSiffror[i][ruta] = new ArrayList<Integer>();

т.е. вы создаете новый список, отбрасывая предыдущий для каждой добавляемой вами цифры!

Попробуйте переместить создание списка:

 ,-->   tillatnaSiffror[i][ruta] = new ArrayList<Integer>();
 |      for(int add=1;add<=9;add++){
 '-----<
            tillatnaSiffror[i][ruta].add(add);
            System.out.println(tillatnaSiffror[i][ruta]);
         }

Демо Ideone.com


В качестве дополнительного примечания я бы предложил избегать использования здесь массивов и постоянно использовать коллекции Java. Например, рассмотрим использование такой структуры, как List<List<Set<Integer>>>.

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