導入
「2つの数を足す」「3つの数を足す」…と、引数の数ごとにオーバーロードを増やしていくのは大変です。「いくつでも受け取れる」引数があれば便利ですね。それが可変長引数です。
説明
public class Main {
public static void main(String[] args) {
System.out.println(sum(1, 2, 3));
System.out.println(sum(10, 20, 30, 40));
System.out.println(sum());
}
static int sum(int... nums) {
int total = 0;
for (int n : nums) {
total += n;
}
return total;
}
}
int... nums…型...の形で書くと、「その型の値を0個以上、いくつでも受け取れる」引数になります。- メソッドの中では、
numsは普通の配列(int[])として扱えます。拡張forで1つずつ取り出せるのはそのためです。 sum(1, 2, 3)のように直接値を並べても、sum()のように0個でも呼び出せます(配列を直接渡すこともできますが、まずは値を並べる書き方に慣れましょう)。
可変長引数は、必ず引数リストの最後に1つだけ書けます。
やってみよう
下のエディタで sum に渡す数の個数を変えて呼び出してみましょう。int... を使わずに配列 int[] を直接渡しても動くか試してみてください。
演習
可変長引数で double を受け取り、その平均を返す average(double... nums) メソッドを作り、average(10, 20, 30) を呼び出して表示してください(結果は 20.0)。
ヒント1を見る
static double average(double... nums) { double total = 0; for (double n : nums) { total += n; } return total / nums.length; }。
ヒント2を見る
nums.length は可変長引数でも普通の配列と同じように使えます。