如何将数组的值设置为参数?

时间:2012-07-18 14:29:20

标签: java arrays

我想要类Path的调用方法路径。我需要设置一些数字 - 数组长度和入口处的数组的适当值。 这是我的班级:

class Path {
 int number;
 String[] path_name = new String [number];
 Path (int n, String [] p){
     number=n; 
     path_name=p; 
 }
public void path(){
 for (int i=1; i<number; i++){
     driver.findElement(By.linkText(path_name[i])).click();  
 }
}

}

这是我尝试调用方法的方法:

Path pa = new Path (6,'array value');
  pa.path();

但我不知道如何正确启动'数组值' - 例如我需要设置“one”,“two”,“three”。有人可以帮忙吗?

我不知道数组开头的长度,所以我无法在构造函数中定义几个字符串

5 个答案:

答案 0 :(得分:2)

你班上有很多问题。

直接在类变量中编写的变量的初始化是在之前>执行构造函数体。因此,path_name数组的初始化将始终使用默认值number完成,即0。这样可行但您的数组无法以这种方式存储任何值。

现在,在您的身体中,我猜您尝试使用path_name数组的内容填充p数组。但是你替换了实例。这很好用但是如果有人在类外更改数组,它也会在这个类中更改。我想您想使用System.arraycopyArrays.copyOf传输值。

对于构造函数的调用,你必须调用这样的东西:

new Path(6, new String[] {"one", "two", ...});

作为改进,我建议你完全放弃number变量,因为你可以随时使用path_name.length来引用数组本身的大小。

您可能想要研究的另一件事是变长参数。如果你改变你的构造函数:

Path(int n, String p...){
     number=n; 
     path_name = p
}

您设置在构造函数调用中的数字后面添加了一个未定义的字符串数量。所有这些字符串都自动打包在一个名为p的String数组中。由于此数组仅存在于此构造函数中,因此您可以安全地复制实例而不是变量。然后构造函数的调用如下所示:

new Path(6, "one", "two", ...);

答案 1 :(得分:1)

尝试类似:

Path pa = new Path(6, String[] {"one", "two", "three"} );

如果您可以更改代码,则可以使用varargs使其更容易:

Path (int n, String p...) 

然后你可以:

Path pa = new Path(6, "one", "two", "three");

答案 2 :(得分:0)

如果我理解你的要求,我认为这就是你想要的 -

class Path { 
 int number; 
 String[] path_name; 
 Path (int length){ 
     path_name = new String[length];
     for(int i=1;i<=length;i++)
         path_name[i-1] = Integer.ToString(i); 
 } 
} 

这假设您希望数组为1 ... n。如果你想要任何你想要的字符串元素,我认为这可能是一个更好的解决方案,我会做

 class Path { 
 int number; 
 String[] path_name; 
 Path (String p){ 
     path_name = p;
 }


 public void some_method(){ 
    String[] a = {"one", "two", "three"};
    Path p = new Path(a);
 }
 } 

答案 3 :(得分:0)

您可以在Path实例化之前初始化String数组,如下所示:

String[] p = {"one", "two", "three"};
Path pa = new Path(6, p);

答案 4 :(得分:0)

如果您接受数组的所有元素都是路径的有效元素的不变量,则可以消除您引用的n数。

考虑到这一点,你可以简单地拥有

class Path {
    final String[] pathNames;
    // uses var args
    Path(String... paths) {
         pathNames = paths;
    }
    void path() {
        // uses enhanced for loop
        for(String path : pathNames) {
            driver.findElement(By.linkText(path)).click();
        }
    }
}

一些批评:

  • 创建对象时,您当前正在创建大小为number的数组。但那时数字为0。所以你要创建一个空数组。
  • 但上述观点无关紧要,因为您立即重新分配了参考文献......
  • 因为你没有防御性地复制数组,所以一些外部代码可以修改数组的元素。这可能不是一件好事。 (这由var args解决,其中没有外部代码可以访问该数组。你不能阻止某人传入数组而不是var args,但他们至少会意识到你期望var args这一事实,所以如果他们想要,他们仍然可以在内部进行改变,但不太可能意外以这种方式引入错误。)