引数を使ってメソッドに値を渡す

広告

メソッドを呼び出す時に呼び出し元から値をメソッドに渡すことができます。まずどのような場合に使うのかを確認してみます。次の例を見て下さい。

public static void main(String args[]){
  int num1, num2;

  num1 = 10;
  num2 = 8;
  System.out.println("num1 = " + num1 + ",num2 = " + num2);
  System.out.println("num1 + num2 = " + (num1 + num2));
  System.out.println("num1 - num2 = " + (num1 - num2));
  System.out.println("num1 * num2 = " + (num1 * num2));
  System.out.println("num1 / num2 = " + (num1 / num2));

  num1 = 23;
  num2 = 7;
  System.out.println("num1 = " + num1 + ",num2 = " + num2);
  System.out.println("num1 + num2 = " + (num1 + num2));
  System.out.println("num1 - num2 = " + (num1 - num2));
  System.out.println("num1 * num2 = " + (num1 * num2));
  System.out.println("num1 / num2 = " + (num1 / num2));
}

この例では2つの値を加算したり乗算したりした結果を表示するものです。繰り返し利用できるように計算して画面に出力する部分をメソッドとして分けてみます。

public static void main(String args[]){
  int num1, num2;

  num1 = 10;
  num2 = 8;
  keisan();

  num1 = 23;
  num2 = 7;
  keisan();
}

private static void keisan(){
  System.out.println("num1 = " + num1 + ",num2 = " + num2);
  System.out.println("num1 + num2 = " + (num1 + num2));
  System.out.println("num1 - num2 = " + (num1 - num2));
  System.out.println("num1 * num2 = " + (num1 * num2));
  System.out.println("num1 / num2 = " + (num1 / num2));
}

2つの変数に値を設定してからkeisanメソッドを呼び出しています。ただこのサンプルはコンパイルした時点でエラーとなります。原因はブロック内で宣言された変数はブロックの外では利用できないためです。

mainメソッドのブロック内で宣言された変数「num1」と変数「num2」は、mainメソッドのブロックの外であるkeisanメソッドのブロックの中では使うことができません。その為、keisanメソッド内で使われている変数「num1」や変数「num2」が宣言されていない変数を使っているというエラーが発生してしまいます。

このような時に引数を使います。引数を使うことでメソッドを呼び出すたびに任意の値をメソッドに渡す事ができます。

引数があるメソッドの呼び出し方

引数があるメソッドの基本的な書式は次のようになります。

public static void main(String args[]){
  メソッド名(値1, ...);
}

修飾子 戻り値の型 メソッド名(データ型 変数名1, ...){
  /* メソッド内で実行する処理 */
}

メソッドを呼び出す時にメソッドに渡したい値を括弧の間に記述します。複数の値を渡す場合はカンマ(,)で区切り続けて記述します。

メソッド側では渡されてきた値を格納するために変数をメソッド名の後の括弧の中に記述します。この変数のことを引数と呼びます。引数は渡されてくる値の数だけ記述する必要があり、渡されてきる値と同じデータ型を使って宣言されている必要があります。

次の例を見てください。

public static void main(String args[]){
  test(16, 'A', 7);
  test(9, 'd', 24);
}

private static void test(int n1, char a, int n2){
  System.out.println("n1 = " + n1);
}

メソッドを呼び出す時に3つの値を指定しています。メソッド側では3つの値が渡されてくる為、引数も3つ記述しています。メソッドから渡されてくる値は、記述された順に引数に代入されていきます。この時の処理の流れは次のようなものだと考えて下さい。

test(16, 'A', 7);   // testメソッドを呼び出し、3つの値を渡す


--- ここからメソッド内の処理 ---
int n1 = 16;       // 渡されてきた値を引数に順番に代入
char a = 'A';
int n2 = 7;

System.out.println("n1 = " + n1);
--- ここまでメソッド内の処理 ---


test(9, 'd', 24);   // testメソッドを呼び出し、3つの値を渡す


--- ここからメソッド内の処理 ---
int n1 = 9;        // 渡されてきた値を引数に順番に代入
char a = 'd';
int n2 = 24;

System.out.println("n1 = " + n1);
--- ここまでメソッド内の処理 ---

メソッドが呼び出されるたびに、その時指定された値がメソッドの引数に代入されます。引数で記述された変数はメソッド内で使用することができますので値を取り出して画面出力を行ったり演算したりすることができます。

注意すべき点は呼び出し元の変数の値が呼び出し先のメソッド内で利用できなかったように、呼び出したメソッド内で使用した変数の値も呼び出し元のメソッドの中では使用できないことです。もしメソッドから何らかの値を呼び出し元に返したい場合には戻り値を使います。戻り値は後のページで解説します。

では一番最初のサンプルを引数があるメソッドを使って正しいプログラムに変更してみます。

public static void main(String args[]){
  int num1, num2;

  num1 = 10;
  num2 = 8;
  keisan(num1, num2);

  num1 = 23;
  num2 = 7;
  keisan(num1, num2);
}

private static void keisan(int n1, int n2){
  System.out.println("num1 = " + n1 + ",num2 = " + n2);
  System.out.println("num1 + num2 = " + (n1 + n2));
  System.out.println("num1 - num2 = " + (n1 - n2));
  System.out.println("num1 * num2 = " + (n1 * n2));
  System.out.println("num1 / num2 = " + (n1 / n2));
}

引数を使うことでメソッドを呼び出すたびに異なった値を処理できるようなメソッドを定義することができます。

サンプル

では簡単な例で試しておきます。

JSample3_1.java

class JSample3_1{
  public static void main(String args[]){
    int num1, num2;

    num1 = 10;
    num2 = 8;
    keisan(num1, num2);

    num1 = 23;
    keisan(num1, 7);

    keisan(15, 22);
  }

  private static void keisan(int n1, int n2){
    System.out.println("num1 = " + n1 + ",num2 = " + n2);
    System.out.println("num1 + num2 = " + (n1 + n2));
    System.out.println("num1 - num2 = " + (n1 - n2));
  }
}

コンパイル後に実行すると次のように表示されます。

p3-1

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)