代码在数独中没有给出预期的结果

Posted

技术标签:

【中文标题】代码在数独中没有给出预期的结果【英文标题】:Code is not giving expected result in sudoku 【发布时间】:2014-09-17 03:57:48 【问题描述】:

我已经编写了匹配二维数组的基本逻辑,但结果有点意外

if(mat1[i][j] == mat2[i][j]) //what this line do

public static final int[][] n_1 = 10,12,6,-1,-1,-1,0,8,2,-1,0,0,0,-1,0,0,0,0,0,0,-1,9,0,0,-1;
public static final int[][] n_2 = 13,-1,9,6,0,0,-1,-1,0,0,0,0,0,0,0,-1,4,7,-1,0,-1,2,8,0,0;
public static final int[][] n_3 = -1,0,0,-1,-1,0,0,0,11,-1,0,0,0,5,-1,8,0,0,0,13,10,-1,6,4,0;
public static final int[][] n_4 = 10,8,0,1,-1,13,0,0,3,-1,0,0,0,-1,-1,0,0,5,0,-1,7,0,0,0,-1;
public static final int[][] n_5 = -1,0,0,6,0,-1,0,0,0,0,12,0,5,-1,0,0,0,3,-1,0,4,-1,-1,-1,1;

public static int[][][] arrayFive = n_1,n_2,n_3,n_4,n_5;  
public static int [][] return5()
    Random r = new Random();
    return arrayFive[r.nextInt(arrayFive.length)];


public boolean checkEqual(int[][] mat1,int[][] mat2)
    boolean b = true;
    for(int i = 0;i<mat1.length;i++)
        for(int j=0;j<mat1.length;j++)
            if(mat1[i][j] == mat2[i][j])
                b = b & true;
            
            else
                b = b &false;
            
        
    
    return b;

【问题讨论】:

哪行代码你没有得到? @sᴜʀᴇsʜᴀᴛᴛᴀ if(mat1[i][j] == mat2[i][j]) if(mat1[i][j] == mat2[i][j]) 只是在进行 int 比较。如果 mat1 是 n_1 而 mat2 是 n_2 则循环只是检查是否 10 == 13、12 == -1 等等。 @Mann 这只是检查 mat 和 mat2 中的元素。顺便说一句,还有一个错字。 第二个for循环的退出条件不应该是j&lt;mat1[i].length吗? 【参考方案1】:

这一行:

        if (mat1[i][j] == mat2[i][j]) 

正在测试两个矩阵的对应元素是否具有相同的值。

在上下文中查看它:

        if(mat1[i][j] == mat2[i][j])
            b = b & true;
        
        else
            b = b &false;
        

这是一种相当麻烦的说法:

        if(mat1[i][j] != mat2[i][j])
            b = false;
        

但您可以将checkEqual 方法重写为:

public boolean checkEqual(int[][] mat1,int[][] mat2)
    for(int i = 0;i<mat1.length;i++)
        for(int j=0;j<mat1.length;j++)
            if(mat1[i][j] != mat2[i][j])
                return false;
            
        
    
    return true;

这在矩阵不相等的情况下要快得多。

最后,值得注意的是,代码假设这两个矩阵是正方形的,并且它们具有相同的大小。如果其中任何一个假设不成立,则该方法将引发异常。

【讨论】:

矩阵为正方形,大小相同。谢谢 @Mann - 是的,在这个例子中,他们显然是。但如果此代码用于更大的应用程序,则该假设可能并不总是正确的。

以上是关于代码在数独中没有给出预期的结果的主要内容,如果未能解决你的问题,请参考以下文章

Verilog 没有给出预期的结果

带有 Locale.getDefault() 的数字格式没有给出预期的结果

多处理池的python保存数据在linux上没有给出预期的结果

C# 代码仅在逐步执行时给出预期结果?

Request.UrlReferrer没有给出预期的结果

NSDateFormatter 没有给出预期的结果