如何将数组传递给方法?

时间:2010-06-01 15:51:05

标签: java arrays

我无法在任何论坛上找到关于此问题的正确答案 但是我究竟如何将数组传递给类构造函数呢?

public class TestArray {
   String name;
   String[] array;

   public TestArray(String name, String[] anArray){
          this.name = name;
          int len = anArray.length;
          this.array = new String[len];
          for (int i = 0; i < len; i++)
          {
              this.array[i] = new String(anArray[i]);
          }
   }

   public static void main(String[] args){
        String[] anArray = new String[2];
        anArray[0] = new String("Test");
        anArray[1] = new String("Test2");
        TestArray work = new TestArray("Jordan", anArray); // How to pass the array?
   }
}

5 个答案:

答案 0 :(得分:2)

您的代码将起作用,减去最后一行中的问号(编辑 - 这已被编辑器删除)。

你的大括号也关闭了 - 移动了main函数在类中(你在TestArray构造函数之后有一个太多的结束括号)。

编辑2 - 现在您的问题已经过编辑以修复错误,它应该按预期工作。我不确定这是否是SO的最佳实践,但这是对meta的讨论。

答案 1 :(得分:1)

public static void main(String[] args){
    String[] anArray = new String[2];
    anArray[0] = new String("Test");
    anArray[1] = new String("Test2");
    TestArray work = new TestArray("Jordan", anArray);
}

虽然有一种较短的方式来初始化anArray

,但这样可以很好地完成
public static void main(String[] args){
    String[] anArray = new String[] { "Test", "Test2" };
    TestArray work = new TestArray("Jordan", anArray);
}

反过来可以缩短为:

public static void main(String[] args){
    TestArray work = new TestArray("Jordan", new String[] { "Test", "Test2" });
}

顺便说一句,String对象是不可变的,因此您不必每次都初始化新的字符串。它们可以像这样直接使用。

最后提示:Arrays.copyOf(anArray, anArray.length)也返回数组的副本,没有for循环。

答案 2 :(得分:0)

完全像你写的那样......

更新

也许您遇到了编译错误,如果是这样,您在代码中放置了一个结束大括号(})。我通过格式化代码删除了它。也许这就是问题...

答案 3 :(得分:0)

数组是对象 - 因此通过引用传递它们。而且您不需要自己制作副本。如果您真的觉得必须复制,那么最好使用System.arraycopy。

答案 4 :(得分:0)

你到底是什么意思?检查完匹配后{}(主要必须进入类),并删除?在anArray之后,程序被编译并工作......:你正确地将数组传递给构造函数...如果你添加

System.out.println(this.array[i]);

您将看到您的anArray内容按预期打印...

P.S。如果您的代码不是用于测试,但您想要真正复制数组,请使用System.arraycopy,如:

    this.array = new String[anArray.length];
    System.arraycopy(anArray, 0, this.array, 0, anArray.length-1);

例如,请参阅here

勘误表 它必须是anArray.length而不是anArray.length-1,因为arraycopy需要长度,而不是我记得的索引:)