2015-02-14 4 views
0

Я создал ArrayList < ArrayList < Целое число >> для хранения координат шахматной доски. У меня возникают проблемы с простое вывод чисел. Когда я выдаю размеры ArrayLists, он сообщает мне, что safeSquares имеет 64 объекта после первого набора циклов for, но этот внутренний список всегда имеет размер нуля после строки «for (ArrayList innerList: safeSquares)». Кажется, что safeSquares никогда не передает arrayLists в innerList, но пытается 64 раза.Вывод целых чисел из ArrayList <ArrayList <Integer>> в Java

static ArrayList<ArrayList<Integer>> safeSquares = new ArrayList<ArrayList<Integer>>(); 
static ArrayList<Integer> squares = new ArrayList<Integer>(); 

for(int i = 0; i < 8; i++){ 
    squares.add(i); 
    for(int x = 0; x < 8; x++){ 
    squares.add(x); 
    safeSquares.add(squares); 
    squares.remove(1); 
    } 
    squares.clear(); 
} 

for(ArrayList<Integer> innerList : safeSquares) { 
    for (Integer number : innerList) { 
    System.out.println(number + " "); 
    } 
} 
+0

почему вы используете squares.remove и squares.clear? – SklogW

+0

Вы не добавляете 64 к квадратам, которые вы добавляете 72, потому что вы добавляете как внутри, так и снаружи внутреннего цикла. Затем вы каждый раз удаляете второй элемент в квадратах каждый раз (массивы нуль-индексируются) вы добавляете массив квадратов. Я не понимаю, чего вы пытаетесь достичь? –

+0

Какой результат вы ожидаете? – janos

ответ

1

Попробуйте пройти через свой код по одной строке за раз, и записывая состояние квадратов и safeSquares после каждой строки кода. Я думаю, вы обнаружите, что не выполняете то, что ожидаете!

Тогда попробуйте этот код, я не уверен, что его именно то, что вы хотите, но я думаю, что его ближе ...

ArrayList<ArrayList<ArrayList<Integer>>> safeSquares = new ArrayList<ArrayList<ArrayList<Integer>>>(); 

for (int i = 0; i < 8; i++) { 
    ArrayList<ArrayList<Integer>> squares = new ArrayList<ArrayList<Integer>>(); 
    for (int x = 0; x < 8; x++) { 
     ArrayList<Integer> pair = new ArrayList<Integer>(); 
     pair.add(x); 
     pair.add(i); 
     squares.add(pair); 
     } 
    safeSquares.add(squares); 
} 

for (ArrayList<ArrayList<Integer>> outlist : safeSquares) { 
    for (ArrayList<Integer> inlist : outlist) { 
     System.out.print(inlist); 
    } 
    System.out.println(); 
} 

Вот результат:

[0, 0][1, 0][2, 0][3, 0][4, 0][5, 0][6, 0][7, 0] 
[0, 1][1, 1][2, 1][3, 1][4, 1][5, 1][6, 1][7, 1] 
[0, 2][1, 2][2, 2][3, 2][4, 2][5, 2][6, 2][7, 2] 
[0, 3][1, 3][2, 3][3, 3][4, 3][5, 3][6, 3][7, 3] 
[0, 4][1, 4][2, 4][3, 4][4, 4][5, 4][6, 4][7, 4] 
[0, 5][1, 5][2, 5][3, 5][4, 5][5, 5][6, 5][7, 5] 
[0, 6][1, 6][2, 6][3, 6][4, 6][5, 6][6, 6][7, 6] 
[0, 7][1, 7][2, 7][3, 7][4, 7][5, 7][6, 7][7, 7] 
+0

Извините за недостаток информации. Я надеюсь, что у вас есть следующий шаблон в safesquares: {{0,0}, {1,0}, {2,0}, {3,0}, ......., {7,7}} ; Каждый массив внутри safeSquares будет координатой на шахматной доске. Вот почему я удаляю один элемент каждый раз во время внутреннего цикла и очищаю «квадраты» после завершения каждой строки. – student

+0

Итак, «квадраты» всегда будут массивом из 2 элементов, который был добавлен в «safeSquares». Я выводил отдельные целые числа «sqaures» и проверял целые числа, но я считаю, что моя проблема связана с выходом элементов в ArrayList, который находится внутри ArrayList. Строка, для (ArrayList innerList: safeSquares), не передает arrayList для «innerList». – student

+0

Для этого было бы лучше использовать Arraylist >>. Вы можете выполнить это с помощью тех же вложенных циклов. Я отредактирую свой ответ! – gnate

0
static ArrayList<ArrayList<Integer>> safeSquares = new ArrayList<ArrayList<Integer>>(); 
static ArrayList<Integer> squares; 

for(int i = 0; i < 8; i++){ 
    squares = new ArrayList<Integer>(); 
    for(int x = 0; x < 8; x++){ 
     squares.add(x); 
} 
safeSquares.add(squares); 
} 

for(ArrayList<Integer> innerList : safeSquares) { 
    for (Integer number : innerList) { 
    System.out.println(number + " "); 
    } 
} 

Это будет работать. Я верю. Если у вас возникли проблемы с пониманием того, что вы ошиблись, увидев это, пожалуйста, спросите. Однако я бы посоветовал вам использовать двумерные массивы. Такие как: Array [] [] int и индексируют его с помощью координат (x, y).

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