初めに
- この記事を開いてくれてありがとうございます.
- 教え方が下手な自分がなんとかまとめたものなので,多めに見てください.
- 要望,指摘あればどんどん書いてください.
- それでは,長らくのお付き合いお願いします.
そもそもメソッドとは
10人のテストの平均点、最高点、最低点を表示してください。
java=Question_11.java
package Question_04;
public class Question_11 {
public static void main(String[] args) {
int[] english = {98,80,78,85,65,86,90,94,70,92};
int high = english[0];
int low = english[0];
int avg = 0;
for(int i = 0;i < english.length;i++) {
if(high <= english[i]) {
high = english[i];
}else if(low >= english[i]){
low = english[i];
}
avg+=english[i];
}
avg/=english.length;
System.out.println("平均点:"+avg+"点");
System.out.println("最高点:"+high+"点");
System.out.println("最低点:"+low+"点");
}
}
- 上記のブログラムは以下のようなmainメソッド1つのメソッド構成になっています.
- このプログラムではmainのメソッドに 「変数宣言」,「計算部分」,「結果出力」 の動作すべてが書き込まれているということになります.
- 変数宣言(mainメソッド):テストの点数を格納
- 計算部分:テストの点数を比較
- 結果出力:テストの点数を表示
- mainメソッド1つでもいいのですが,もし,大きなプログラムを書く場合に,数千行という行数になってしまい管理がとても大変です.
- そこで,「変数宣言」,「計算部分」,「結果出力」 を分けようということで,メソッドという考え方を使用します.
どのような基準でメソッドを分けるのか.
- 「行数が増えると大変だからメソッドを分けるのか」という漠然とした理解を得られたところで,どのように分けていくか解説します.
- まず,プログラムを大きく分けると以下のように分けられます.
変数宣言部分
- 変数宣言部分では,使用する変数に値を格納している動作です.
java=Question_11.java
int[] english = {98,80,78,85,65,86,90,94,70,92};//englishに10人分の点数を格納
int high = english[0];//最高点を比較するための変数を宣言
int low = english[0];//最低点を比較するための変数を宣言
int avg = 0;//平均点を算出するための変数を宣言
計算部分
- 計算部分では,点数の比較を行い,最高点,最低点,平均点を算出します.
java=Question_11.java
for(int i = 0;i < english.length;i++) {//10人分の点数を比較するために10回(人数分)ループ
if(high <= english[i]) {//最高点を選別
high = english[i];
}else if(low >= english[i]){//最低点を選別
low = english[i];
}
avg+=english[i];//平均点を算出するために点数の合計を格納
}
結果出力部分
- 結果出力部分では,問題文であるように,「表示してください」の動作を行っています.
java=Question_11.java
System.out.println("平均点:"+avg+"点");
System.out.println("最高点:"+high+"点");
System.out.println("最低点:"+low+"点");
実際どのようなプログラムになるのか
java=Question_11.java
package Question_05;
public class Test {
public static void main(String[] args) {
int[] english = {98,80,78,85,65,86,90,94,70,92};
int highscore = english[0];
int lowscore = english[0];
int avgscore = 0;
int highend = high(english,highscore);
int lowend = low(english,lowscore);
int avgend = avg(english,avgscore);
display(highend,lowend,avgend);
}
public static int high(int[] english,int highscore) {
for(int i = 0;i < english.length;i++) {
if(highscore <= english[i]) {
highscore = english[i];
}
}
return highscore;
}
public static int low(int[] english,int lowscore) {
for(int i = 0;i < english.length;i++) {
if(lowscore >= english[i]){
lowscore = english[i];
}
}
return lowscore;
}
public static int avg(int[] english,int avgscore) {
for(int i = 0;i < english.length;i++) {
avgscore+=english[i];
}
avgscore/=english.length;
return avgscore;
}
public static void display(int highend,int lowend,int avgend) {
System.out.println("平均点:"+avgend+"点");
System.out.println("最高点:"+highend+"点");
System.out.println("最低点:"+lowend+"点");
}
}
- このように分けることができます.
メソッドを分けることができるのは分かったが,引数や,戻り値って何?
- メソッドを分けたことによって変数宣言したものは,メソッド内でしか,呼び出すことができません.
- 例:mainメソッドで
int x = 0;
とコードを書いても,highメソッドでSystem.out.println(x);
のように使用してもxの値を表示することはできません. - つまり,変数宣言してもメソッド内でしか使用することができない.
- 例:mainメソッドで
- なので,引数や,戻り値を使って値を呼び出します.
引数や,戻り値を使う理由
- 変数宣言(mainメソッド)で宣言した点数格納用のenglishや,点数を比較するためのhighscoreなどの変数は計算部分で使用するために宣言したものです.
- なので,引数として,これらの変数を参照します.そして,計算結果を戻り値として,変数宣言に戻します.こうすることで,mainメソッドで計算結果を扱うことができます.
- 同様に,出力結果を出力するためには,計算結果が必要です.
- なので,引数として,計算結果を先ほど戻り値として返した変数宣言から参照します.
- これらの動作によって出力結果を出力することができます.
最後に
- お付き合いいただきありがとうございました.
- 質問や要望があればどんどん書いてください.