未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【Java】基本構文に関する問題1-12

title


問題1-12

mainメソッドはすでに完成しています。(変更は禁止です)

mainメソッド内で呼び出している、第一引数の文字列を第二引数の回数分表示するdisplayメソッドを定義してください。


【実行結果】

テスト
テスト
テスト
テスト
テスト


【MethodBasicPractice.java】

public class MethodBasicPractice {
    public static void main(String[] args) {

        // displayメソッドの呼び出し
        display("テスト", 5);

    }

    // ここにdisplayメソッドを定義してください


}


解答例

【ForHiLevelPractice.java】

public class MethodBasicPractice {
     public static void main(String[] args) {

          // displayメソッドの呼び出し
          display("テスト", 5);

     }

     // ここにdisplayメソッドを定義してください
     public static void display(String message, int count) {

          for(int i = 0; i < count; i++) {
               System.out.println(message);
          }

     }

}


解説

プログラミング言語には、一連の処理を小さな単位にまとめて名前をつけることができる仕組みが必ず存在します。

それらは、関数、ファンクション、メソッド、プロシージャ等、いろいろな呼び方をしますが、Javaではメソッドという呼び方で統一されています。

(JDK8からは概念的に関数も追加されました)



今回の問題は非常にオーソドックスなメソッド定義の問題となっています。


まず初心者の方に確認ですが、次のように書いてしまったりしなかったでしょうか。

public void display(String test, int five) {
    for(int i = 1; i <= 5; i++) {
        System.out.println("テスト");
    }
}


このメソッドには、悪い点が4点あります。

一つずつ確認していきましょう。



このメソッド定義は、そもそもコンパイルエラーになります。


その理由は、Javaのメソッドにはインスタンスメソッドとクラスメソッドの2種類あり、クラスメソッドであるmainメソッドから直接呼び出せるのは、staticキーワードが付加されているクラスメソッドだけだからです。


よって、displayメソッドの定義は必ずstaticを付加しなければなりません。

まずこの点を改善してみましょう。

public static void display(String test, int five) {
    for(int i = 1; i <= 5; i++) {
        System.out.println("テスト");
    }
}


このようにstaticをきちんと付加すると、上記プログラムはコンパイル・実行可能になります。

実行結果は「テスト」が5回表示されるので、一見正しいように見えます。

でも、これだとメソッドの意味が全くありません。


メソッドは、処理に必要なデータを「引数」という形で受け取ります。

引数はメソッド定義の丸括弧の中で宣言し、呼び出す際に初期値が渡されます。

今回は「テスト」を5回出力しますが、それはmainメソッドで「テスト」と「5」を渡しているからです。

ですから、displayメソッド内に固定で「テスト」や「5」という値を書いてはいけません。

きちんと引数として受け取った値を使用するように注意しましょう。

public static void display(String test, int five) {
    for(int i = 1; i <= five; i++) {
        System.out.println(test);
    }
}


だいぶ良くなってきましたが、まだダメです。

引数名の命名には、変数と同じく「意味のある英単語」を使用します。

しかし、第一引数名は「test」、第二引数名は「five」になっています。

今回はたまたま「テスト」と「5」という値が渡ってきただけなので、引数名がそれに引っ張られるのは本末転倒です。

そこを改善すると、次のようになります。

public static void display(String message, int count) {
    for(int i = 1; i <= count; i++) {
        System.out.println(message);
    }
}


これでほぼ完成です。

間違いではありません。

しかし、ひとつだけ指摘するなら、for文を使って指定回数だけループする場合、ループ変数iの初期値は0にして、条件式の比較演算子は「<=」ではなく「<」を使うのが基本となります。

よほどの理由がない限り、このJavaのマナーに従った方が良いでしょう。


参考図書



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加