Java 将一维数组[81]转换为多维数组[9][9](数独解算器)

Java 将一维数组[81]转换为多维数组[9][9](数独解算器),java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我最近开始做一个数独解算器。解算器本身已经完成,效果很好,但我发现了一个问题。我的解算器基于存储数独游戏板编号的2D数组。 数组看起来像这样 12表示需要数字的空格。 问题是我的程序使用反射JavaAPI从游戏中读取数独棋盘整数。该方法以1D数组的形式返回数独板,如下所示 12表示需要数字的空格。 我需要将电路板的1D阵列版本(上面显示的第二个阵列)转换为2D阵列版本(上面显示的第一个阵列)格式。新的二维数组必须有9行9列 你们有什么想法吗?你们需要使用嵌套循环来填充2D数组,并在每个点访问1D

我最近开始做一个数独解算器。解算器本身已经完成,效果很好,但我发现了一个问题。我的解算器基于存储数独游戏板编号的2D数组。 数组看起来像这样

12表示需要数字的空格。

问题是我的程序使用反射JavaAPI从游戏中读取数独棋盘整数。该方法以1D数组的形式返回数独板,如下所示

12表示需要数字的空格。

我需要将电路板的1D阵列版本(上面显示的第二个阵列)转换为2D阵列版本(上面显示的第一个阵列)格式。新的二维数组必须有9行9列


你们有什么想法吗?

你们需要使用嵌套循环来填充2D数组,并在每个点访问1D数组中的正确位置:

int[][] result = new int[9][];
for(int x = 0;x < 9;x++) {
    result[x] = new int[9];
    for(int y = 0;y < 9;y++) {
        result[x][y] = currentPuzzle[9*x+y];
    }
}
int[][]结果=新的int[9][];
对于(int x=0;x<9;x++){
结果[x]=新整数[9];
对于(int y=0;y<9;y++){
结果[x][y]=currentPuzzle[9*x+y];
}
}

您还需要考虑什么是X,什么是Y,以及一维数组的顺序。这段代码可能会生成一个围绕对角线翻转的数独游戏。

当然-看起来这应该很容易。只要您知道它将有81个条目,您就可以使用:

public static int[][] convertArray(int[] oldArray) {
    int[][] newArray = new int[9][9];
    for(int i = 0; i < 8; i++) {
        for(int k = 0; k < 8; k++) {
            newArray[i][k] = oldArray[(i * 9) + k]
        }
    }
    return newArray;
}
公共静态int[]convertary(int[]oldArray){
int[]newArray=newint[9][9];
对于(int i=0;i<8;i++){
对于(int k=0;k<8;k++){
newArray[i][k]=oldArray[(i*9)+k]
}
}
返回新数组;
}
其思想是创建一个新的二维数组,然后外部forloop控制要将数字放入的行,内部forloop控制要放入的列

int[][] result = new int[9][];
for(int x = 0;x < 9;x++) {
    result[x] = new int[9];
    for(int y = 0;y < 9;y++) {
        result[x][y] = currentPuzzle[9*x+y];
    }
}
public static int[][] convertArray(int[] oldArray) {
    int[][] newArray = new int[9][9];
    for(int i = 0; i < 8; i++) {
        for(int k = 0; k < 8; k++) {
            newArray[i][k] = oldArray[(i * 9) + k]
        }
    }
    return newArray;
}