練習問題 解答

10.8 練習問題 解答

問1

① ○:任意なメソッドを定義可能です。
② ○:定義してあれば呼び出し可能です。
③ ×:引数の数とデータの型も合っている必要があります。
④ ○:定義した型の値を戻す必要があります。
⑤ ×:必須ではありません。処理の内容に応じて使い分けます。

問2

① メソッド名:squareNum
 戻り値の型:int型 引数の型:int型
② メソッド名:printStr1
 戻り値の型:なし(void) 引数の型:String型
③ メソッド名:returnTitle
 戻り値の型:String型 引数の型:なし
④ メソッド名:printStr2
 戻り値の型:なし(void) 引数の型:なし

問3

triangleメソッド
static double triangle(int base, int height) {
   double area = (double)base * height / 2;
   return area;
}

問4

calcSumメソッド
static int calcSum(int num) {
   int sum = 0;
   for (int i = 1; i <= num; i++) {
     sum += i;
   }
   return sum;
}

問5

① 戻り値:char型  引数:int型
② 5
③ 5
④ A
⑤ A

問6

➢ Practice1002.java

1package jp.co.f1.intro.ch10exercise;
2 
3public class Practice1002 {
4    static void checkAge(int tmpAge) {
5        if (tmpAge >= 20) {
6            System.out.println(tmpAge + "歳は通常料金です。");
7        } else {
8            System.out.println(tmpAge + "歳は半額料金です。");
9        }
10    }
11 
12    public static void main(String[] args) {
13        int age;
14 
15        age = 10;
16        checkAge(age);
17 
18        age = 20;
19        checkAge(age);
20    }
21}

問7

➢ Practice1003.java

1package jp.co.f1.intro.ch10exercise;
2import java.util.Scanner;
3 
4public class Practice1003 {
5    static void outSign() {
6        System.out.print("* ");
7    }
8 
9    static void dispLine(int num) {
10        for (int i = 0; i < num; i++) {
11            for (int j = 0; j < num; j++) {
12                outSign();
13            }
14            System.out.println();
15        }
16    }
17 
18    public static void main(String[] args) {
19        Scanner sin = new Scanner(System.in);
20        System.out.print("正方形の1辺を入力-->");
21        int num = sin.nextInt();
22        dispLine(num);
23    }
24}

問8

➢ Practice1004.java

1package jp.co.f1.intro.ch10exercise;
2 
3public class Practice1004{
4 
5    /*
6     * 引数に取った配列の中身を逆順にして返すメソッド
7     */
8    static int[] reverse(int[] array) {
9 
10        for(int i = 0; i < (array.length / 2) ; i++) {
11            int hoge = array[i]; // 一時記録用
12             
13            // 逆順になるということは、要素数4の配列の場合、
14            // インデックス0とインデックス3が入れ代わり、
15            // インデックス1とインデックス2が入れ替わるということである。
16            array[i] = array[array.length -1 - i];
17             
18            // 退避させておいた値を代入する。
19            array[array.length -1 - i] = hoge;
20        }
21         
22        return array;
23    }
24 
25    public static void main(String[] args) {
26        int[] ary = { 1, 3, 5, 7 };
27        System.out.println(" -- 変更前の配列 -- ");
28        for (int i = 0; i < ary.length; i++) {
29            System.out.println(ary[i]);
30        }
31        System.out.println(" -- 変更後の配列 -- ");
32        int[] reverseAry = reverse(ary);
33        for (int i = 0; i < ary.length; i++) {
34            System.out.println(reverseAry[i]);
35        }
36    }
37 
38}

解説

 まず、引数に取った配列の中身を逆順にした配列を戻り値とするメソッドであるreverseメソッドについて説明します。
 このメソッド内のロジックは一例です。メソッド内部のロジックはこれと同じである必要はありません。
 ただし、このメソッドの必須項目は、以下の4つです。
 ・戻り値の型がint[]であること
 ・メソッド名がreverseであること
 ・引数の型がint[]であること
 ・returnで引数に取った配列の中身が逆順となった配列の変数名を返していること
   8: static int[] reverse(int[] array) {
   9:
   10:    for(int i = 0; i < (array.length / 2) ; i++) {
   11:           int hoge = array[i]; // 一時記録用
   12:
   13:           // 逆順になるということは、要素数4の配列の場合、
   14:           // インデックス0とインデックス3が入れ代わり、
   15:           // インデックス1とインデックス2が入れ替わるということである。
   16:           array[i] = array[array.length -1 - i];
   17:
   18:           // 退避させておいた値を代入する。
   19:           array[array.length -1 - i] = hoge;
   20:    }
   21:
   22:    return array;
   23: }

 このメソッドのロジックの場合は、配列の要素の先頭側と最後尾側を入れ替えることで、逆順にしようとしています。

問9

➢ Practice1005.java

1package jp.co.f1.intro.ch10exercise;
2 
3public class Practice1005{
4 
5    static double searchMaximum(double[] ary) {
6        double maxNum = ary[0];
7         
8        for(int i = 1; i < ary.length; i++) {
9            if(maxNum < ary[i]) {
10                maxNum = ary[i];
11            }
12        }
13                return maxNum;
14    }
15    public static void main(String[] args) {
16         
17        double[] aryDouble = new double[10];
18         
19        System.out.println(" -- ランダムに生成された10個の数値 -- ");
20        for(int i = 0; i < 10; i++) {
21            aryDouble[i] = Math.random();
22            System.out.println(aryDouble[i]);
23        }
24         
25        System.out.println(" -- 最大値 -- ");
26        System.out.println(searchMaximum(aryDouble));
27         
28 
29    }
30}

解説

 引数で受け取った配列の要素の最大値を戻り値として返すメソッドを作成します。やはり、ロジックはこのプログラムと同じである必要はありません。
 必須項目は、以下の4つです。
 ・戻り値の型はdouble型であること
 ・メソッド名は、searchMaximumであること
 ・引数の型はdouble型であること
 ・returnの次に、最大値を表すdouble型の値が記述されていること
 このメソッドは、インデックス0から順にその時点の最大値を変数maxNumに入れていき、最終的に全ての要素を比較し終えたとき、変数maxNumの値は全ての要素の最大値である、というロジックです。
 まず最大値を入れる変数maxNumを宣言し、基準となるインデックス0の要素の値を代入しています。
   6: double maxNum = ary[0];

 インデックス0とインデックス1の値を比較し、インデックス1の値の方が大きければ、現時点の最大値は置き換わるので、変数maxNumにはインデックス1の値を代入します。これを繰り返し、配列の全ての要素を比較します。
   8: for(int i = 1; i < ary.length; i++) {
   9:    if(maxNum < ary[i]) {
   10:        maxNum = ary[i];
   11:    }
   12: }

 最後に、導き出された最大値を戻り値として返します。
   13: return maxNum;

 最大値を表示します。searchMaximumというメソッドを記述すると、戻り値が表示されます。
   26: System.out.println(searchMaximum(aryDouble));

f