微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个 int 自动将其值设置为特定数字,而我不打算这样做

如何解决一个 int 自动将其值设置为特定数字,而我不打算这样做

我正在尝试创建一个自动生成数独棋盘的代码。首先,我创建一个包含 9 个数组的数组,因为 9 行有 9 列。在第一行,我为每列设置了从 1 到 9 的随机数。此外,我创建了 3 个布尔值,表示该行或该列或该正方形 3x3 中存在该数字。

它成功生成数独,但这里的问题是第 60 行中的 Int i (i = 9) 始终设置为 6 或 7,尽管最后的 else 已完成并且它在一次运行中发生多次。这是代码示例。

希望你们能修复这个错误,谢谢。

import java.util.*;

public class loop {
        static int[][] array;
        static boolean[][] markRow;
        static boolean[][] markColumn;
        static boolean[][][] markMatrix;
    public static void main(String[] args) {
        array = new int[][] {
            {0,0},{0,0}
        };
        markRow = new boolean[9][9];
        markColumn = new boolean[9][9];
        markMatrix = new boolean[3][3][9];
        
        for (int j = 0; j < 8; j++ ){
            Random random = new Random();
            int randomnum = random.nextInt(9) + 1;
            if (!markRow[0][randomnum-1] && !markColumn[j][randomnum-1] && !markMatrix[0/3][j/3][randomnum-1] ) {
                array[0][j] = randomnum;
                markRow[0][randomnum-1] = true;
                markColumn[j][randomnum-1] = true;
                markMatrix[0/3][j/3][randomnum-1] = true;
            }else {
                j--;
            }
        }
        solver(0,0);
    }

    public static void solver(int i,int j){
        if (i < 9 && j < 9){
            if(array[i][j] == 0){
                for (int z = 1; z <= 9 ; z++){
                    if (!markRow[i][z-1] && !markColumn[j][z-1] && !markMatrix[i/3][j/3][z-1]){
                        markRow[i][z-1] = true;
                        markColumn[j][z-1] = true;
                        markMatrix[i/3][j/3][z-1] = true;
                        array[i][j] = z;
                        solver(i,j + 1);
                        markRow[i][z-1] = false;
                        markColumn[j][z-1] = false;
                        markMatrix[i/3][j/3][z-1] = false;
                        array[i][j] = 0;
                    }
                }
            }
            else{
                solver(i,j + 1);
            }
        }
        else if (i < 9 && j >= 9){ 
            solver(i + 1,0);
        }
        else{
            printresult();
        }
    }

    public static void printresult(){
        for (int x = 0; x < 9 ; x++){
            System.out.println(Arrays.toString(array[x]));
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。