【问题标题】:Array Clone doesn't work阵列克隆不起作用
【发布时间】:2013-06-12 12:42:23
【问题描述】:

我的代码有什么问题?

在我这样做的主要方法中:

int [] test=new int[48];

test=etable(Right[]).clone();

我想要的是,'test' 数组与'etable' 方法的输出完全相同。

我的方法叫做“etable”:

public static int [] etable(int [] right){
int [] blabla=new int[48];
...
return blabla[]
}

感谢您的建议

【问题讨论】:

  • 你的代码一切都错了。它不会编译并且传递给etable() 的参数被忽略。
  • 怎么了,我也不知道:)。其实我不知道,你在说什么。查看代码,我不确定是否有拼写错误或者您没有得到所需的输出。有什么问题?
  • 真正的问题(在我看来)是你没有正确解释代码应该做什么。如果您不这样做,我们就无法真正告诉您该怎么做那个。 (好吧......所以也许这只是一个人为的例子。但在那种情况下,为什么还要打扰所有关于etable 等等的东西?它只会让问题变得不必要地冗长和混乱!!)

标签: java arrays eclipse clone


【解决方案1】:

我的代码有什么问题?

这一行是编译错误:

    test = etable(Right[]).clone();

如果right(或Right)是一个变量(声明为int[]类型),那么你应该这样编写方法调用:

    test = etable(right).clone();

如果Right 是一个类型,那么这不是创建数组的正确语法。 (从您编写etable 方法的方式来看,您不应该将新数组传递给它。)

第二个问题是这个顺序没有意义:

    int test[] = new int[48];
    test = etable(...).clone();

您正在分配一个包含 48 个元素的数组...然后通过为 test 变量分配不同的数组引用来丢弃它。

第三个问题是clone() 很可能是多余的。您的etable 方法正在分配一个新数组(在blabla 中)并返回它。然后调用代码复制新数组。除非 etable 在某处保存对 blabla 数组的引用,否则复制步骤不会实现任何目标。

最后一个问题是,如果Right 真的是一个变量名,那么这就是严重的Java 风格违规。在 Java 中,变量名不应以大写字母开头。

【讨论】:

    【解决方案2】:

    例如使用Arrays.copy():

    int[] tmp = etable(whatever);
    int[] test = Arrays.copy(tmp, 0, tmp.length);
    

    至于您的原始代码,例如:

    test = ebtable(Right[]).clone();
    

    不是合法的 Java(Right 到底是什么?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2011-06-25
      • 2016-09-08
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      相关资源
      最近更新 更多