Итерация по 2D-массиву, заключенному в объект - PullRequest
0 голосов
/ 16 января 2012

У меня есть проблема, которую я изучал некоторое время в Интернете, но не могу найти ничего, что могло бы помочь мне прийти к выводу.

У меня есть класс Сетка . Сетка хранит двумерный массив типа Ячейка .

public class Grid implements Iterable<Cell>{
    private Cell[][] grid;

А у меня класс Основной . Я хочу иметь возможность перебирать двумерный массив grid внутри объекта Grid , формируя Main таким образом:

public class Main {
Grid grid;

    for(Cell c: grid){
        //do something
    }
}

Я не могу просто добавить:

public Iterator<Cell> iterator() {
    retrun grid.iterator();
}

Внутри моего Сетки класса, потому что он возвращает ошибку.

Я не хочу, чтобы объекты Cell содержали координаты, я хотел бы, чтобы двумерный массив представлял систему координат.

Ответы [ 2 ]

0 голосов
/ 16 января 2012
for(Cell[] row : grid) {
  for(Cell cell : row) { 
    // do stuff
  }
}

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

0 голосов
/ 16 января 2012

Cell [] [] не поддерживает Iterator.Вы должны создать внутренний класс GridIterator в Grid, который реализует Iterator и чьи next () и hasNext () возвращают то, что вы считаете «следующей» ячейкой, до тех пор, пока сетка не будет пройдена.

...