Java NQueens递归程序中的逻辑错误

Java NQueens递归程序中的逻辑错误,java,function,methods,recursion,Java,Function,Methods,Recursion,我正在使用java,并试图制作一个使用递归来解决NQueens难题的程序。问题是它在不应该的时候给了我true(例如3应该返回false,因为你可以取消3x3网格)。每件事我都看了很多遍,但我找不到哪里出了问题。有人知道吗 package model; public class NQueensModel { private int myNumsQueen; private boolean[][] myBoard; private static NQueensModel

我正在使用java,并试图制作一个使用递归来解决NQueens难题的程序。问题是它在不应该的时候给了我true(例如3应该返回false,因为你可以取消3x3网格)。每件事我都看了很多遍,但我找不到哪里出了问题。有人知道吗

package model;

public class NQueensModel 
{
    private int myNumsQueen;
    private boolean[][] myBoard;
    private static NQueensModel myModel = new NQueensModel(3);

    public static void main (String[] args) {

        System.out.println(myModel.solvePuzzle());


    }
    public NQueensModel(int nQueens)
    {
        myNumsQueen = nQueens;

        myBoard = new boolean[myNumsQueen][myNumsQueen];
    }
    public boolean solvePuzzle()
    {
        return this.solvePuzzle(myNumsQueen);
    }
    private boolean solvePuzzle(int ncolumn)
    {
        if(ncolumn>myNumsQueen)
        {
            return true;
        }
        int i;
        for( i =0; i<myBoard.length;i++)
        {
            if(this.isSafeMove(i, ncolumn)==true)
            {

                myBoard[i][ncolumn-1]=true;
                if(this.solvePuzzle(ncolumn+1)==true)
                {
                    return true;
                }
                myBoard[i][ncolumn]=false;
            }

        }
        return false;

    }
    private boolean isSafeMove(int row, int col)
    {
        for(int i=0; i<myBoard[row].length; i++)
        {
            if(myBoard[row][i]==true)
            {
                return false;
            }
        }
        for(int i = 0; i<myBoard.length; i++)
        {

            if(myBoard[i][col-1]==true)
            {
                return false;
            }
        }
        if(this.checkLowerDiag(row, col)==true)
        {
            return false;
        }
        if(this.checkUpperDiag(row, col)==true)
        {
            return false;
        }
        if(this.checkLeft(row,col)==true)
        {
            return false;
        }
        else
        {
            return true;
        }


    }
    private boolean checkUpperDiag(int row, int col)
    {   
        if(row==0)
        {
            return true;
        }
        else if(col==myBoard[0].length)
        {
            if (myBoard[row-1][col-2]==true)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        else if(myBoard[row-1][col-2]==true || myBoard[row-1][col]==true)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    private boolean checkLowerDiag(int row, int col)
    {

        if(col==1 && myBoard[row][col]==true)
        {
            return true;
        }
        else if(col == myBoard[0].length)
        {
            if(myBoard[row+1][col-2]==true)
            {

                 return true;
            }
            else
            {
                return false;
            }
        }
        else if(row == myBoard.length)
        {
            return true;
        }

        else if(myBoard[row+1][col-2]==true || myBoard[row+1][col]==true)
        {
            return true;
        }

        else
        {
            return false;
        }
    }
    private boolean checkLeft(int row, int col)
    {
        if(myBoard[row][col-1]==true)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    private boolean placeQueen(int row, int col)
    {
        myBoard[row][col] = true;
        return true;
    }
    private boolean removeQueen(int row, int col)
    {
        myBoard[row][col] = false;
        return false;
    }
//  public String toString()
//  {
//      
//  }
}
包模型;
公共类模型
{
密努姆斯奎因私人酒店;
私有布尔[][]myBoard;
私有静态NQueensModel myModel=新的NQueensModel(3);
公共静态void main(字符串[]args){
System.out.println(myModel.solvePuzzle());
}
公共NQueensModel(intnqueens)
{
myNumsQueen=nQueens;
myBoard=新布尔值[myNumsQueen][myNumsQueen];
}
公共布尔解谜()
{
返回此.solvePuzzle(myNumsQueen);
}
私有布尔解算器(int-ncolumn)
{
如果(n列>myNumsQueen)
{
返回true;
}
int i;

对于(i=0;i@user2864740CodeReview用于同行评审工作代码。修复bug和查找错误是StackOverflow的工作基础…@retailcoder我并没有在主题中找到“一般程序逻辑错误”。更不用说需要滚动了。