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

var-argsを使用する

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

も参照してください

于 2013-02-15T06:41:48.380 に答える
1

「匿名の内部配列」のようなものはありません。そこにあるのは、単に配列作成式です。

varargs 配列を使用するには、メソッド宣言を次のように変更するだけです。

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 に答える