Java 如何创建二维阵列的克隆?

Java 如何创建二维阵列的克隆?,java,function,methods,boolean,Java,Function,Methods,Boolean,我正在尝试创建myBoard[]]的克隆,因为现在当我尝试返回它时,会得到所有不正确的假值 我应该在哪里克隆它,以及如何克隆它,以便获得一份myBoard[]]的副本,该副本具有合法的值,而不是所有的假值?我试图用public boolean[]getBoard()在底部返回它 包模型; 公共类模型 { 密努姆斯奎因私人酒店; 公共int=0; 私有布尔[][]myBoard; 私有布尔[][]myGridBoard; 公共静态void main(字符串[]args){ //... } 公共NQ

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

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

包模型;
公共类模型
{
密努姆斯奎因私人酒店;
公共int=0;
私有布尔[][]myBoard;
私有布尔[][]myGridBoard;
公共静态void main(字符串[]args){
//...
}
公共NQueensModel(intnqueens)
{
myNumsQueen=nQueens;
我的可能性=0;
myBoard=新布尔值[myNumsQueen][myNumsQueen];
}
公共布尔解谜()
{
返回值(0);
}
私有布尔解算器(int-ncolumn)
{
如果(n列>myNumsQueen-1)
{               
myc++;
}
int i;
对于(i=0;i0)
{
返回true;
}
其他的
{
返回false;
}
}
私有布尔isSafeMove(int行,int列)
{
if(row=mynumsquen | | col=mynumsquen)
{
返回false;
}
else if(this.checkLowerDiag(row,col)==true | | this.checkUpperDiag(row,col)==true | | | this.checkLeft(row,col)==true)
{
返回false;
}
其他的
{              
返回true;
}             
}
专用布尔值checkUpperDiag(整数行,整数列)
{    
如果(行==0)
{
返回false;
}
其他的
{
对于(int i=row,j=col;i>=0&&j>=0;i--,j--)
{
if(myBoard[i][j]==true)
{
返回true;
}
}
返回false;
}
}
专用布尔值检查下限标记(整数行,整数列)
{            
如果(列==0)
{           
返回false;
}
如果(行==myNumsQueen-1){
返回false;
}
其他的
{                
对于(int i=row,j=col;i=0;i++,j--)
{   
如果(j>=mynumsquen)
{
返回false;
}                   
else if(myBoard[i][j]==true)
{
返回true;
}                                       
}
返回false;
}
}
私有布尔checkLeft(int行,int列)
{
如果(列==0)
{
返回false;
}
其他的
{
对于(int i=col;i>=0;i--)
{                   
如果(i>=myNumsQueen)
{
返回false;
}
else if(myBoard[row][i]==true)
{
返回true;
}
}
返回false;
}          
}
专用布尔placeQueen(整数行,整数列)
{
如果(列>=myNumsQueen)
{
返回false;
}
myBoard[行][列]=真;
返回true;
}
私有布尔removeQueen(整数行,整数列)
{
myBoard[row][col]=假;
返回false;
}
公共整数{
返回我的可能性;
}
公共布尔值[][]getBoard()
{

对于(int i=0;i嗯,如果您只是想创建一个克隆数组,那么您必须通过在旧数组上迭代并复制以下值来构建它:

for (int i = 0; i < oldArray.length; ++i)
  for (int j = 0; j < oldArray[0].length; ++j)
    newArray[i][j] = oldArray[i][j];
for(int i=0;i
在使用本机类型时,可以使用
clone()

publicstaticboolean[]]clone2DArray(boolean[]]array){
//这个克隆是一个浅拷贝
boolean[]]newArray=(boolean[][])array.clone();
//现在您需要克隆每个阵列,因为它们仍然引用同一个阵列

对于(int i=0;i

如果它全部为假,而您怀疑它不应该为假,那么克隆不是解决方案(它只会创建一个新的假值板),另一个是错误的。它给了我正确数量的可能性,这意味着它正在按照它应该的方式工作,我只需要一个可能性的实例为什么是
main(…)
edited out?为了更快地获得更好的帮助,请发布一个。它们只是system.out.printing我正在检查的内容before@arynaq为什么“手动”复制要比克隆好?它应该具有与调用目标相同的结果exception@user2909132如果我们的解决方案(哪两个都有效!)不适合你-你应该调试或者至少检查stacktrace,看看问题的根源在哪里。这并不意味着这些答案不好-这只是意味着你找错了地方!i和j precrement应该是一个增量,否则所有的零都将被跳过。@LeeAllan??索引变量不适用t直到循环执行后才递增。@alfasin如果你的
克隆
不是很深,那么每个数组都将是相同的,你还必须克隆“子数组”!alfasin是2darray@alfasin不工作,我只是尝试一下..下面是代码
publicstaticvoidmain(stringargs[]){boolean[]]array=newboolean[3][3];System.out.println(Arrays.deepToString(array));System.out.println(“克隆数组:”;布尔[][]克隆=数组.clone();数组[0][0]=true;System.out.println(Arrays.deepToString(克隆));}
for (int i = 0; i < oldArray.length; ++i)
  for (int j = 0; j < oldArray[0].length; ++j)
    newArray[i][j] = oldArray[i][j];
public static boolean[][] clone2DArray(boolean [][] array){
     // this clone is a shallow copy
     boolean[][] newArray =(boolean[][]) array.clone();
    //now you need to clone each array cause still referring to the same
    for(int i=0;i<array.length;i++){
        newArray[i]=Arrays.copyOf(array[i],array[i].length); 
        //newArray[i]=(boolean[])array[i].clone(); this is valid too           
    }
       return newArray;
}