Javaメソッドの可変長引数 (最後の引数)の使い方

可変長引数
  • このエントリーをはてなブックマークに追加
  • Pocket

メソッドで引数の数を事前に設定したくないときがある。

例えば、入力した数字の平均値を出すというメソッドの時、何個入力するかはそのときどきで変えたい場合があるだろう。

そんなときに使えるのが、可変長引数だ。このページではJavaメソッドの可変長引数の使い方についてお伝えする。とはいえ、使い方は簡単だ。

Javaメソッド最後の引数は可変長引数にもなる

可変長引数とは?

Javaのメソッドの最後の引数は可変長引数として使うこともできる。

可変長引数とは、メソッドの定義側でひとつ引数を設定しておくと、実際につかうときにいくつも引数を書けるということだ。

引数の数は決まっていないが、型が同じという引数があれば、この書き方が使える。

可変長の引数は配列に入れられて、メソッドに渡される。このため、メソッド側では配列と同じ扱いで、処理を行うことができる。

可変長引数の書き方

書き方を見てみよう。

呼び出す側の書き方は簡単だ。実引数N1から実引数Nnまでが可変長引数にあたる。

メソッド名(実引数A, 実引数B, … 実引数N1, 実引数N2, … 実引数Nn);

一方、呼び出されるメソッドの引数の定義では、最後の引数の型と識別子の間に、「…」を入れて書く。こうすれば、可変長だと宣言したことになる。

書き方の基本はこれだ。

修飾子 戻り値の型 メソッド名(型 識別子A, 型 識別子B, … , 型 … 識別子N) {
   命令文;
   ・・・
   return 式;
}

では、簡単なサンプルプログラムで確かめてみよう。

可変長の引数のサンプルプログラム

このサンプルプログラムは、クラスの生徒の体重の平均を表示する。クラス毎に人数が異なっても、メソッドの定義を変える必要はない。実引数の最後の体重を生徒の数に合わせて書けばよい。

public class MethodWithLastFomalParameter {
    public static void main (String[] args) {
        printWeightAverage("クラスA", 35.6, 54.7);//[1]
        printWeightAverage("クラスB", 44.2, 35.6, 60.8, 54.7);//[2]
        printWeightAverage("クラスC", 44.2, 35.6, 60.8, 54.7, 99.9, 32.4);//[3]
    }
    private static void printWeightAverage(String className, double ... weights) {//[4]
        double sum = 0;//[5]
        for(double weight: weights) {//[6]
            sum += weight;//[7]
        }
        System.out.println("[8] " + className + ":(人数:" + weights.length + ")");
        System.out.println("[9] 体重:" + sum / weights.length);
    }
}

実行結果

[8] クラスA:(人数:2)
[9] 体重:45.150000000000006
[8] クラスB:(人数:4)
[9] 体重:48.825
[8] クラスC:(人数:6)
[9] 体重:54.6

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] メソッド:printWeightAverageを2人の体重を引数として呼び出す
  • [2] メソッド:printWeightAverageを4人の体重を引数として呼び出す
  • [3] メソッド:printWeightAverageを6人の体重を引数として呼び出す
  • [4] 可変長引数を持つメソッド:printWeightAverageを定義する
  • [5] 変数:sumの宣言と初期化を行う
  • [6] [7] 体重の合計を求める
  • [8] クラスと人数を表示する
  • [9] 体重の平均を表示する

メソッド側に渡される値を確認するサンプルプログラム

簡単にメソッドに渡される値が、配列だということを確認しておこう。

このサンプルプログラムではよく使う方法([ ])で、配列の要素の値を取り出し、その要素の値を表示している。

public class DumpLastFomalParameter {
    public static void main (String[] args) {
        printNumbers(101, 102, 103, 104, 105, 106);//[1]
    }
    private static void printNumbers(int ... numbers) {//[2]
        for (int index = 0; index < numbers.length; index ++) {//[3]
            System.out.println("[4] number[" + index + "] : " + numbers[index]);
        }
    }
}

実行結果

[4] number[0] : 101
[4] number[1] : 102
[4] number[2] : 103
[4] number[3] : 104
[4] number[4] : 105
[4] number[5] : 106

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] メソッド:printNumbersを呼び出す
  • [2] 可変長引数を持つメソッド:printNumbersを定義する
  • [3] [4] 配列の要素の値をすべて表示する

まとめ

このページではJavaメソッドの可変長引数についてお伝えした。

使える場面は多いので、使い方は理解しておこう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

  1. よもぎ より:

    初歩的な質問かもしれませんが、
    13行目、
    System.out.println("[9] 体重:" + sum / weights.length);
    ではなく
    System.out.println("[9] 体重:" + + + sum / weights.length);
    とするのはなぜですか?

    1. リカレントテクノロジー より:

      ご愛読いただきありがとうございます。

      (誤) System.out.println("[9] 体重:" + + + sum / weights.length);
      (正) System.out.println("[9] 体重:" + sum / weights.length);

      となります。
      ご指摘いただきありがとうございました。

      引き続き、ご愛読のほど、よろしくお願いいたします。

よもぎ へ返信する コメントをキャンセル

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する