有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建2d阵列的克隆?

我正在尝试创建myBoard[]的克隆,因为现在当我尝试返回它时,我会得到所有不正确的假值

我到底应该在哪里克隆它,以及如何克隆,以便获得一份myBoard[]的副本,该副本具有合法的值,而不是所有的假值?我试图用public boolean[]getBoard()在底部返回它

package model;

public class NQueensModel
{
    private int myNumsQueen;
    public int myPossibilities=0;
    private boolean[][] myBoard;
    private boolean[][] myGridBoard;

    public static void main (String[] args) {
        //...
    }
    public NQueensModel(int nQueens)
    {
        myNumsQueen = nQueens;
        myPossibilities=0;
        myBoard = new boolean[myNumsQueen][myNumsQueen];
    }
    public boolean solvePuzzle()
    {
        return solvePuzzle(0);            
    }
    private boolean solvePuzzle(int ncolumn)
    {
        if(ncolumn>myNumsQueen-1)
        {               
            myPossibilities++;
        }
        int i;       
        for( i =0; i<myNumsQueen;i++)
        {           
            if(this.isSafeMove(i, ncolumn)==true)
            {                
                this.placeQueen(i,ncolumn);
                if(this.solvePuzzle(ncolumn+1)==true)
                {                           
                    return true;                          
                }
                this.removeQueen(i, ncolumn);
            }                     
        }                  
        return false;            
    }

    private boolean doIt(int county)
    {
        if(county>0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private boolean isSafeMove(int row, int col)
    {
        if(row <0 || row>=myNumsQueen || col<0 || col>=myNumsQueen)
        {
            return false;
        }
        else if(this.checkLowerDiag(row, col)==true ||this.checkUpperDiag(row, col)==true ||this.checkLeft(row,col)==true)
         {
             return false;
         }
         else
         {              
            return true;
         }             
    }

    private boolean checkUpperDiag(int row, int col)
    {    
        if(row==0)
        {
            return false;
        }
        else
        {
            for(int i=row, j = col; i>=0 && j>=0; i--, j--)
            {
                if(myBoard[i][j]==true)
                {
                    return true;
                }
            }
            return false;
        }
    }

    private boolean checkLowerDiag(int row, int col)
    {            
        if(col==0 )
        {           
            return false;             
        }
        if(row==myNumsQueen-1){
            return false;
        }
        else
        {                
            for(int i = row, j = col; i<myNumsQueen && j>=0;  i++, j--)
            {   
                if(j>=myNumsQueen)
                {
                    return false;
                }                   
                else if(myBoard[i][j]==true)
                {
                    return true;                        
                }                                       
            }
            return false;
        }
    }

    private boolean checkLeft(int row, int col)
    {
        if(col==0)
        {
            return false;
        }
        else 
        {
            for(int i = col; i>=0; i--)
            {                   
                if(i>=myNumsQueen)
                {
                    return false;
                }

                else if(myBoard[row][i]==true)
                {
                    return true;
                }
            }
            return false;
        }          
    }
    private boolean placeQueen(int row, int col)
    {
        if(col>=myNumsQueen)
        {
            return false;
        }

        myBoard[row][col] = true;
        return true;
    }
    private boolean removeQueen(int row, int col)
    {
        myBoard[row][col] = false;
        return false;
    }
    public int getPossibilities(){
        return myPossibilities;
    }
    public boolean[][] getBoard()
    {
        for(int i  = 0; i<5; i++)
        {               
            for(int j = 0; j<5; j++)
            {
                System.out.println("myBoard : " +myBoard[i][j]);
            }
        }           
        return myBoard;
    }
}

共 (0) 个答案