0

请告知我如何将以下程序转换为可变参数,这是java 5引入的新功能,现在我正在使用匿名内部数组..

public class AnnonymousArrayExample {

    public static void main(String[] args) {

        //calling method with anonymous array argument
        System.out.println("first total of numbers: " + sum(new int[]{ 1, 2,3,4}));
        System.out.println("second total of numbers: " + sum(new int[]{ 1, 2,3,4,5,6,}));

    }

    //method which takes an array as argument
    public static int sum(int[] numbers){
        int total = 0;
        for(int i: numbers){
            total = total + i;
        }
        return total;
    }
}
4

7 回答 7

2

像这样制作你的方法签名 public static int sum(int ... numbers)

以下是有效的调用

sum();
sum(1,2,3);
sum(1,2,3,4,5);
sum(new int[] {1,2,3})
于 2013-02-15T06:41:38.237 回答
2

使用可变参数

public static int sum(int... numbers){}

另见

于 2013-02-15T06:41:48.380 回答
1

没有“匿名内部数组”之类的东西 - 你所拥有的只是一个数组创建表达式

要使用可变参数数组,您只需像这样更改方法声明:

public static int sum(int... numbers) {
    // Code as before - the type of numbers will still be int[]
}

并将调用代码更改为:

System.out.println("first total of numbers: " + sum(1, 2, 3, 4));

有关更多详细信息,请参阅Java 语言规范的第 8.4.1 节,或Java 1.5 语言指南

于 2013-02-15T06:45:38.407 回答
0

使用varargs (...)改变你的方法签名public static int sum(int... numbers)

public static int sum(int... numbers){
       int total = 0;
       for(int i: numbers){
           total = total + i;
       }
       return total;
}

...

System.out.println("first total of numbers: " + sum(new int[]{ 1, 2,3,4}));
System.out.println("second total of numbers: " + sum(new int[]{ 1, 2,3,4,5,6,}));

更多信息varargs-参考文件

于 2013-02-15T06:42:15.380 回答
0

只需更改您的参数声明(从 [] 到 ...)并且调用部分没有更改:

public class AnnonymousArrayExample {

    public static void main(String[] args) {

        // calling method with anonymous array argument
        System.out.println("first total of numbers: "
                + sum(new int[] { 1, 2, 3, 4 }));
        System.out.println("second total of numbers: "
                + sum(new int[] { 1, 2, 3, 4, 5, 6, }));

    }

    // method which takes an array as argument
    public static int sum(int... numbers) {
        int total = 0;
        for (int i : numbers) {
            total = total + i;
        }
        return total;
    }
}
于 2013-02-15T06:42:19.920 回答
0

sum 方法应声明如下:

public static int sum(int ... numbers)

呼叫应如下所示:

sum(1,2,3,4,5)
于 2013-02-15T06:43:10.140 回答
0

sum函数如下所示:

public static int sum(int... numbers) {
  int total = 0;
  for (int i : numbers) {
    total = total + i;
  }
  return total;
}

它看起来几乎与您的原始代码相同 - 并且有充分的理由。据我所知,在内部,可变参数是由编译器使用数组翻译的。这两个函数的签名是相同的——你不能在代码中同时保留这两个函数。所以“省略号”语法只是语法糖。

以及函数的调用:

int total = sum(1,2,3,4);

语法上看起来更简洁,但在底层,它与您的原始代码相同 - 编译器将创建一个数组,使用给定的值对其进行初始化,并将其作为参数传递给函数。

于 2013-02-15T06:53:51.303 回答