【问题标题】:Copy Constructor: Special Case复制构造函数:特例
【发布时间】:2014-05-29 21:31:41
【问题描述】:

所以我需要复制一个方法的实例,并且必须返回一个实例。

我的问题是这个对象由一个数组组成,并且还需要复制这个数组中的所有内容。

类构造函数只指定二维数组的宽高,这个类构造函数不能改变。

如何创建副本?我假设以下内容不起作用,因为它只复制数组的大小对吗?

public Grid copyGrid (Grid grid) {
        return new Grid(height, width);
    }

【问题讨论】:

  • 你能提供你所说的课程吗?
  • 您需要自己复制元素,使用几个嵌套循环。
  • 我无法粘贴任何代码,因为这是一项任务,除了这里的这一部分之外,它已经完成了。但是有几个 setX 和 setY 方法
  • 好的,Grid 类有你所说的数组的 getter/setter?

标签: java constructor copy clone


【解决方案1】:

您需要确保您可以访问 Grid 对象的所有数据(即 getter 和 setter 可用)。例如,根据您拥有的方法类型,您的代码可能如下所示。

public Grid copyGrid(Grid grid) {
    Grid g = new Grid(grid.getHeight(), grid.getWidth());

    for (int row = 0; row < height; row++) {
        for (int col = 0; col < width; col++) {
            g.setValue(row, col, grid.getValue(row, col));
    }
    return g;
}

假设您可以在网格中获取和设置单个值。

【讨论】:

  • 问题清楚地提到构造函数不能被修改,它是一个二维数组,没有一个方法适用于二维数组。
  • @Kayaman - 不,不习惯解释否决票。
  • 嗯,应该是更文明的人。我认为 SO 以质量为荣。
  • @Kayaman 这就是你留下带有 F 炸弹的评论然后删除它的原因吗?
  • 我从未声称自己是文明的,但我解释了我的反对意见。再说了,我也没有删,我只是想看看它是怎么消失的。
【解决方案2】:

你需要自己复制元素。

public Grid copyGrid (Grid grid) {
  Grid newGrid = new Grid(height, width);
  for (int row = 0; row < height; row++) {
    for (int col = 0; col < width; col++) {
      newGrid.getArray()[row][col] = grid.getArray()[row][col];
    }
  }
  return newGrid;
}

【讨论】:

  • @hoya21:不,这在语法上是正确的,你的不是。也更好地表达了这个想法。
  • @hoya21 您将Grid 类视为一个数组。最后,OP 说他们有一个用于数组的吸气剂。
  • 谢谢!我要为 getArray 导入哪个类?
  • @user14900 如果您的 Grid 类有一个用于支持数组的 getter,请将其替换为 getArray()。如果没有,您需要告诉使用您如何访问网格的元素。
  • 我从不同的类中为其赋值。
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 2013-10-13
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多