我无法在任何论坛上找到关于此问题的正确答案 但是我究竟如何将数组传递给类构造函数呢?
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?
}
}
答案 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需要长度,而不是我记得的索引:)