Способ сделать это состоит в том, чтобы расположить объекты Cell в массиве таким образом, чтобы было простое сопоставление координаты X, Y с индексом Cell в массиве.
Например, давайте предположим, что X и Y идут от 1 до 10. Предположим, что мы затем расположим ячейки так:
array[0] = Cell(1, 1);
array[1] = Cell(1, 2);
...
array[9] = Cell(1, 10);
array[10] = Cell(2, 1);
array[11] = Cell(2, 2);
...
array[99] = Cell(10, 10);
Должно быть легко увидеть, что мы можем вычислить индекс ячейки (i, j) в массиве и извлечь ячейку следующим образом:
public Cell getCell(Cell[] array, int i, int j) {
int index = (10 * (i - 1)) + (j - 1);
return array[index];
}
Этот подход обычно используют языки программирования, которые поддерживают N-мерные типы массивов, для их реализации.
Это можно тривиально изменить, чтобы иметь дело со случаями, когда:
- константа 10 - это нечто другое
- матрица не квадратная,
- матрица имеет более двух измерений
- индексы работают от 0 до N - 1 вместо 1 до N
- 1022 * прочее *
Существуют и другие способы представления двумерных матриц в Java. Самый простой - просто использовать Cell[][] cells
, который позволяет вам получить доступ к ячейкам как (например) cells[i-1][j-1]
. Могут быть разработаны более сложные представления, которые используют меньше места, если матрица разрежена (то есть отсутствуют ячейки) за счет более сложного кода и более медленного времени доступа.