首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中克隆二维字符串数组

在java中克隆二维字符串数组
EN

Stack Overflow用户
提问于 2014-03-14 13:20:41
回答 2查看 92关注 0票数 0

我正在写一个有父节点的程序。该父节点有一个2d字符串数组和包含父2d字符串数组但经过修改的子节点。但是,当我创建子对象的2d数组时,它一直使用对parents数组的引用。这样,在子数组创建结束时,父数组就拥有了所有子数组的修改。我尝试使用System.arraycopy、Arrays.copyOf创建一个复制构造函数,但都无济于事。下面是构造函数

代码语言:javascript
复制
public class Board
{
 private String[][] Gameboard;
 public Board(Board parent)
 {
  this.Gameboard = parent.Gameboard;
 }
}

我还尝试了遍历数组并逐个分配字符串,但也不起作用。我像这样调用构造函数:

代码语言:javascript
复制
Board temp = new Board(parent);
EN

回答 2

Stack Overflow用户

发布于 2014-03-14 13:58:40

试试这个:

代码语言:javascript
复制
class parent {
    static String[][] Gameboard = new String[5][5];

    public static void main (String[] args) {
        for(int i = 0; i < 5; i++) {
            for(int j = 0; j < 5; j++) {
                Gameboard[i][j] = "" + j;
            }
        }
        Board b = new Board();
    }
} 

class Board { 
    private String[][] Gameboard;

    public Board() { 
        this.Gameboard = parent.Gameboard; 
        for(int i = 0; i < 5; i++) {
            for(int j = 0; j < 5; j++) {
                System.out.print("" + this.Gameboard[i][j]);
            }
            System.out.print("\n");
        }   
        System.out.print("Lenght Of Class Boar.GameBoard =" + this.Gameboard.length);  
    } 
}

票数 0
EN

Stack Overflow用户

发布于 2014-03-14 14:28:43

您可以使用复制构造函数,如下所示:

代码语言:javascript
复制
public class Test {
    String[][] arr2D = new String[2][2];

    public Test() {
    }

    public Test(Test t) {
        this.arr2D = deepCopy(t.arr2D);
    }

    // deepCopy
    private String[][] deepCopy(String[][] arr2D) {
    String[][] arr2D2 = new String[arr2D.length][arr2D.length];
      for (int i = 0; i < arr2D.length; i++) {
         for (int j = 0; j < arr2D.length; j++) {
            arr2D2[i][j] = arr2D[i][j];
         }
      }
       return arr2D2;
    }

    public void setArr2D(String[][] arr2D) {
        for (int i = 0; i < arr2D.length; i++) {
            for (int j = 0; j < arr2D.length; j++) {
                arr2D[i][j] = i + "row " + j + "column";
            }
        }
    }

    public String[][] getArr2D() {
        return this.arr2D;
    }

    public static void main(String[] args) {
        Test t1 = new Test();
        t1.setArr2D(t1.getArr2D());
        System.out.println(Arrays.deepToString(t1.getArr2D()));
        Test t2 = new Test(t1);
        t2.setArr2D(t1.getArr2D());
        System.out.println(Arrays.deepToString(t2.getArr2D()));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22396775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档