java - 将二维数组划分为多个盒子

标签 java arrays multidimensional-array iteration

我在将 2D 数组划分为方框时遇到问题,就像在数独中一样。我的棋盘对象中有一个正方形数组,我想将它们分成 2x3 或 3x3 的盒子,盒子对象有一个一维数组来跟踪正方形。

k 是盒子编号,在 9x9 数独中,盒子将编号为 0 到 8。

int l = 0;
for(int i=k*a; i<k*a+a;i++){
        for(int j=k*b;j<k*b+b;j++){
            narray[l]=brd.getSquare(i,j);
            brd.getSquare(i,j).setBox(this);
            l++;
    }

这使得第一个框正确,但之后就消失了。我已经思考这个问题好几个小时了,但我似乎无法理解它。有没有人有一个巧妙的技巧?

最佳答案

所以,我假设这些盒子的编号如下:

012
345
678

(每个盒子由 3x3 个单元格组成)

如果 ij 是 x 和 y 坐标,您需要将上述内容转换为坐标。像这样的东西:

  0 1 2 3 4 5 6 7 8

x 0 1 2 0 1 2 0 1 2
y 0 0 0 1 1 1 2 2 2

所以x = k%3y = k/3

在实际的网格中,x和y必须从0、3和6开始,而不是从0、1和2开始,所以只需乘以3即可。

所以类似这样的事情应该做到这一点:(根据 x 坐标和 y 坐标而变化)

int size = 3;
int l = 0;
for(int i = 0; i < size; i++){
    for(int j = 0; j < size; j++){
        int x = i + k % size * size;
        int y = j + k / size * size;
        narray[l] = brd.getSquare(x, y);
        brd.getSquare(x, y).setBox(this);
        l++;
    }
}

关于java - 将二维数组划分为多个盒子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344694/

相关文章:

javascript - Each block 用于任意嵌套数组

java - 为什么 objectify 的 put() 函数不抛出异常?

java - 防止两个用户从不同的 session 提交相同的表单数据

java - 从命令行运行 Java 程序

python - 一次获取 NumPy 数组中多个元素的索引

c# - 将多维字节数组保存到 SQL Server 数据库

java - 使字符串真正不可变

javascript - 在对象数组中,如何更新(而不仅仅是查找)属性 X 等于 Y 的对象?

javascript - 在 SELECT (REACTJS) 中动态使用 ENUMS 作为选项 TAG

python - 使用索引替换二维 numpy 数组的一部分