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
となる。
ぜひ参考にしてください。