Java 不允许对数组进行子索引。
您所指的内容在 C 中是微不足道的,但在 Java 中,您需要:
- 将数据复制到新数组
- 使用从存储中抽象出来的自定义类。
在java中,没有办法foo[0]
永久引用另一个数组的元素bar[3]
。
如果要使用int[][]
,则必须复制数组。Arrays.copyOfRange
并且System.arraycopy
将是最有效的选择,但对于数独大小,它显然没有太大的区别。
对于第二种方法,编写一个自定义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!
自己添加尺寸信息和类似的东西。