メソッド(基礎編)でシンプルなメソッドの使い方について説明しました。
引数のあるメソッド(基礎編)ではメソッドへの引数の渡し方について説明しました。
今回はさらにステップアップして戻り値のあるメソッドについて説明します。
メソッド(基礎編)に関してはこちらを参考にしてください。
引数のあるメソッドに関してはこちらを参考にしてください
戻り値のあるメソッド
引数のあるメソッドからさらにステップアップして、メソッドで受け取った引数でなんらかの計算をしてその計算の結果を呼び出し元に返したい場合が実務上でよくあります。
その計算結果のことを「戻り値」(戻してもらう値)といいます。
戻り値のあるメソッドの流れ
- 戻り値の型 メソッド名 ( 引数列 ) {
- 命令文
- return 戻り値 ;
- }
呼び出し側の①の処理のあとメソッドを呼び出します。(引数がある場合と引数がない場合があります)
②メソッドでなんらかの処理(四則演算など)が行われます。そしてその結果を戻してもらいます。
呼び出し側はその計算結果を受け取って③でなんらかの処理をおこないます。
書き方はメソッド名の前に 戻り値の型 を記述します。
最初の時点でどのような値を戻してもらうのかを決めなければなりません。
戻り値がないメソッドのときはメソッド名の前に void を記述しました。
この void というのは戻り値がないという意味です。
戻り値がある場合は必ずこのタイミングで戻り値の型を示す必要があります。
そして命令文の後に return を記述します。
これは文字通り「戻しますよ」という意味です。
return の後は戻り値(変数名)を記述します。
戻り値のあるメソッドの書き方
- 戻り値のあるメソッドの呼び出し
- 戻り値を代入する変数 = メソッド名 (引数) ;
- String message = ShowMessage ( ainput ) ;
- 戻り値のあるメソッドの書き方
- 戻り値の型名 メソッド名 (型 変数名){
- 命令文 ;
- return 戻り値の変数 ;
- }
- 戻り値の型名 メソッド名 (型 変数名){
- static String ShowMessage ( int a ) {
- String msg = ” 正解の数を当てましょう。0~9までの数字を1つ入力してください。あなたが入力した数字は “ + a ;
- return msg ;
- }
戻り値のあるメソッドの呼び出し方は引数のあるメソッドの呼び出し方とは少し異なります。
引数のあるメソッドでは
ShowMessage ( ainput ) ;
で呼び出すことができました。
戻り値のあるメソッドを呼び出すということは、呼び出した段階で必ずなんらかの値を受け取っているということになります。
その戻り値をそのまま置くわけにはいかないので、なんらかの変数をつくってその中に格納する必要があります。
ここでは戻り値が文字列だとして
String message ⇐ 文字列型の message という名前をつけて文字列型の変数を宣言します。
メソッドを呼び出した結果の戻り値を入れる入れ物を用意しておきます。
このような処理をあらかじめしておかなければなりません。
もしこの入れ物を用意しておかないと戻ってきた値をどこにいれるのかシステム側がわからないのでエラーが発生してしまいます。
メソッド側の記述のしかたは
static は修飾子としてそのまま記述してください。
String で文字列型の戻り値が戻ってくるということを明言します。
その戻り値を受け取ってどのような処理をするかというと、引数のあるメソッドではそのまま出力の命令を記述しました。
今度はまず代入します。
String msg ⇐ 文字列型の msg という変数を宣言して、その入れ物にメッセージを代入します。
そしてそのメッセージの後ろに+aという受け取った引数を記述して返します。
return msg ; でmsg という変数の中身を戻すということを記述します。
戻り値のあるメソッドのプログラムコード
▶プログラムコード
- import java . io . * ;
- class InputRansu4 {
- public static void main ( String [ ] args ) throws IOException {
- BufferedReader br = new BufferedReader ( new InputStreamReader ( System . in ) ) ;
- int ainput = -2 ; // ainput : 入力された値
- int answer = ( int ) ( Math . random ( ) * 10 ) ; // 正解の値
- String message = ShowMessage ( ainput ) ; // メソッドの呼び出し
- System . out . println ( message ) ;
- while ( 1 > 0 ) {
- System . out . print ( ” 0~9を入力 =” ) ;
- String aString = br . readLine ( ) ;
- ainput = Integer . parseInt ( aString ) ;
- if ( ainput > 9 ) { // エラーメッセージの条件追加
- message = ShowMessage ( ainput ) ; // メソッドの呼び出し
- System . out . println ( message ) ;
- }
- else {
- if ( ainput < answer ) {
- System . out . print ( ” 正解より小さいです “ ) ;
- } else if { ( ainput > answer ) {
- System . out . print ( ” 正解より大きいです “ ) ;
- } else {
- System . out . print ( ” 正解です!おめでとうございます! “ ) ;
- break ;
- }
- }
- }
- }
- static String ShowMessage ( int a ) {
- String msg = ” 正解の数を当てましょう。0~9までの数字を1つ入力してください。あなたが入力した数字は “ + a ;
- return msg ;
- }
- }
戻り値のあるメソッドの書き方
- static String ShowMessage ( int a ) {
- String msg = ” 正解の数を当てましょう。0~9までの数字を1つ入力してください。あなたが入力した数字は “ + a ;
- return msg ;
- }
static String ShowMessage ( int a ) {
static の後に戻り値の型である String とメソッド名を記述します。
引数があるので( )の中に引数も記述します。
戻り値は変数に格納して、その変数を戻すので String msg に文字列と受け取った引数をくっつけて格納します。
return msg ; で戻す処理をおこないます。
呼び出したメソッドの書き方1
- int ainput = -2 ; // ainput : 入力された値
- int answer = ( int ) ( Math . random ( ) * 10 ) ; // 正解の値
- String message = ShowMessage ( ainput ) ; // メソッドの呼び出し
- System . out . println ( message ) ;
String message
受け取るための変数をつくります。=メソッド名で呼び出します。
呼び出したらこの変数の中身を出力する命令文を記述します。
出力の内容は ( message ) です。
呼び出したメソッドの書き方2
- if ( ainput > 9 ) { // エラーメッセージの条件追加
- message = ShowMessage ( ainput ) ; // メソッドの呼び出し
- System . out . println ( message ) ;
- }
入力された値が9より大きいと判断された場合にメソッドを呼び出します。
引数を渡してメソッドを呼び出して戻り値を受け取って変数 message に格納します。
文字列型の変数はすでに宣言されているため、
message = ShowMessage ( ainput ) ;
と型名は書かなくても大丈夫です。
そしてその message の中身を出力する命令文を記述します。
実行結果は
正解の数を当てましょう。0~9までの数字を1つ入力してください。あなたが入力した数字は -2
0~9を入力 =
となります。
入力した数字が9より大きければ再度「正解の数を当てましょう。・・・」が無限に出力され
正解の値と比較して大きいか小さいかの結果が正解がでるまで表示されます。
正解の値と一致するとプログラム終了となります。
なにも入力していないのに一番はじめに表示された「-2」という値に関してはこちらを参考にしてください。
ユーザーが数字を入力すると入力した数字が-2に上書きされます。
まとめ
引数のあるメソッド
プログラムの実行結果は引数のあるメソッドの挙動とまったく同じです。
ただメッセージの出力のしかた
System . out . println ( ) ; ⇐ の( )の中に直接文章を記述するのではなく、
System . out . println ( message ) ;
のようにいったん変数に格納してその変数を出力するというかたちになります。
メソッドの中の処理としては「正解の数を当てましょう。・・・」の文字列と受け取った引数「a」とくっつけてmsgという変数の中に格納します。
その変数の中身を戻り値として main の呼び出し側に渡して、呼び出し側はその内容を出力した。
という挙動となります。
引数のあるメソッドで記述した class InputRansu3 プログラムと今回記述した class InputRansu4 のプログラムを見比べて、戻り値の有無でどのようにプログラムの記述のしかたが変わるのかを比較してみてください。
class InputRansu3 プログラムではメソッドを呼び出すタイミングでメソッドの内容が出力されました。
今回記述した class InputRansu4 のプログラムではメソッドを呼び出したタイミングではまだ何も出力されません。
System . out . println ( message ) ;
が実行されてはじめてメッセージが出力されます。
つまりメッセージが出力されるタイミングが異なるということです。
メソッドは少し複雑な部分があるのでメソッド基礎編を何度か読んでコードを記述して理解を深めてください。
メソッド基礎
引数のあるメソッド基礎