Java не допускает субиндекс массивов.
Что вы имеете в виду тривиальным возможно в C, но в Java вам нужно будет либо:
- копию данных в новых массивах
- использовать пользовательский класс абстрагироваться от хранения.
В Java, нет никакого способа, которым foo[0]
постоянно относится к элементу bar[3]
другого массива.
Если вы хотите работать с int[][]
, вам придется скопировать массивы. Arrays.copyOfRange
и System.arraycopy
будут наиболее эффективным выбором, но в размере Sudoku он явно не имеет большого значения.
Для второго подхода напишите обычай Matrix
класс. Например
class Matrix {
int[] flatStorage;
int[] offsets;
Matrix(int[] flatStorage, int[] offsets) {
this.flatStorage = flatStorage;
this.offsets = offsets;
}
void set(int x, int y, int val) {
flatStorage[ offsets[x] + y ] = val;
}
int get(int x, int y) {
return flatStorage[ offsets[x] + y ];
}
}
int[] sharedStorage = new int[27];
Arrays.fill(sharedStorage, -1); // Initialize with -1
int[] allOffsets = new int[]{0,9,18, 27,36,45, 54,63,72};
Matrix nineByNine = new Matrix(sharedStorage, allOffsets);
Matrix northEast = new Matrix(sharedStorage, new int[]{6,15,24});
Matrix southEast = new Matrix(sharedStorage, new int[]{60,69,78});
nineByNine.set(1,7, 2); // Write to middle of upper right quadrant
System.err.println(northEast.get(1, 1)); // Read - should be 2!
Добавить информацию о размере и подобных вещах самостоятельно.
Вам действительно нужны отдельные массивы для каждого раздела, или вы просто хотите указать на те области в исходном массиве? Если последнее, вы, вероятно, можете создать класс, в котором каждый экземпляр представляет каждый конкретный раздел, и, как вы его называете, вы извлекаете фактическое значение с доски [] [], но абстракция этого класса поможет вам легко увидеть его как просто раздел. Просто идея ... Надеюсь, это не слишком смущает. –
Пахнет судоку ... Я предлагаю вам использовать цикл for, так как вы знаете первую и последнюю строки и первый и последний столбцы для «досок» в «доске». –
Для каждого из них вам понадобится '= new int [3] [3]'. В настоящее время вы просто инициализируете 'se'. – Dukeling