本文へスキップ
BecomeCoder

Java文法コース · 第6章 メソッド ― 処理をひとまとまりにする · レッスン27

可変長引数 ― 個数が決まっていない引数を受け取る

ブラウザで完結

導入

「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 は可変長引数でも普通の配列と同じように使えます。

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。