駆け出しのエンジニア日記

プログラミング言語勉強中の奮闘日記

Javaの可変長引数

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

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

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

 

そもそも可変長引数とは・・・?

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

可変長引数とは、メソッドの定義側でひとつ引数を設定しておくと、実際につかうときにいくつも引数を記述できます。

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

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

 

一つ例を見てみましょう。

public static void main(String args) {
printScoreAverage("クラスA", 89.7, 98.9);
printScoreAverage("クラスB", 66.2, 93.6, 85.8, 80.7);
printScoreAverage("クラスC", 95.2, 68.6, 79.8, 81.7, 99.9, 59.4);
}
public static void printScoreAverage(String className, double... scores) {
double sum = 0;
for (double score : scores) {
sum += score;
}
System.out.println(className + ":(人数:" + scores.length + ")");
System.out.println("点数:" + sum / scores.length);
}

生徒のテスト平均点を表示する。クラス毎に人数が異なっても、メソッドの定義を変える必要はない。実引数の最後の点数を生徒の数に合わせて書けば問題ないです。

出力結果は、

クラスA:(人数:2
点数:94.30000000000001
クラスB:(人数:4
点数:81.575
クラスC:(人数:6
点数:80.76666666666667

上記のようになる。

書き方としては、メソッドの引数の定義では、最後の引数の型と識別子の間に、「…」を入れて記述。これで可変長だと宣言したことになる。

 

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

public static void main(String args) {
printNumbers(1, 2, 3, 4, 5, 6);// [1]
}
private static void printNumbers(int... numbers) {// [2]
for (int i = 0; i < numbers.length; i++) {// [3]
System.out.println("number[" + i + "] : " + numbers[i]);
}

出力結果は下記の通り

number[0]:1
number[1]:2
number[2]:3
number[3]:4
number[4]:5
number[5]:6

となる。

 

ぜひ参考にしてください。