未来エンジニア養成所Blog

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

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

title


問題1-5

int型の変数ageが宣言してあります。変数ageは年齢を表しています。

変数ageの値が20以上の場合は「成人です」と表示します。

また、変数ageの値が20未満かつ0以上の場合は「未成年です」と表示します。

それ以外の場合は「エラー」と表示します。


さらに、未成年の場合に限り次のような表示も行います。変数ageの値が6未満または14より大きい場合は「今は義務教育を受けていません」と表示し、それ以外の場合は「今は義務教育を受けています」と表示します。


【実行結果】

年齢:25
成人です
年齢:18
未成年です
今は義務教育を受けていません
年齢:12
未成年です
今は義務教育を受けています
年齢:-2
エラー


【IfNormalPractice.java】

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

        // 年齢変数の宣言と初期化
        int age = 25;        // ←値を変更しながら実行

        System.out.println("年齢:" + age);

        // if文の開始


    }
}


解答例

【IfNormalPractice.java】

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

        // 年齢変数の宣言と初期化
        int age = 25;        // ←値を変更しながら実行

        System.out.println("年齢:" + age);

        // if文の開始
        if(age >= 20) {       // 20歳異常の場合
            System.out.println("成人です");
        } else if(age < 20 && age >= 0) {   // 20歳未満0歳以上の場合
            System.out.println("未成年です");

            if(age < 6 || age > 14) {     // 6歳未満14歳より大きい場合
                System.out.println("今は義務教育を受けていません");
            } else {  // それが以外の場合
                System.out.println("今は義務教育を受けています");
            }
        } else {  // それ以外(負の値)の場合
            System.out.println("エラー");
        }
    }
}


解説

条件分岐はプログラミング言語にとって非常に重要なトピックです。

しっかりマスターしておきましょう。


最初に「成人です」と「未成年です」の出力を分岐しなければいけないのですが、次のように記述した人はいないでしょうか。

if(age >= 20) {
    System.out.println("成人です");
} else {
    System.out.println("未成年です");
}


これだと「変数ageの値が20以上の場合は『成人です』と表示します」という指示は満たしていますが、「また、変数ageの値が20未満かつ0以上の場合は『未成年です』と表示します。それ以外の場合は『エラー』と表示します」という指示を全く満たせていません。


これは、else文の中に「未成年です」というメッセージを出力していて、成人以外はすべて未成年と決めつけていることが原因です。

エラーを表示する指示も全く考慮されていません。



今回、未成年の定義は「20歳未満かつ0歳以上」となっていますから、else if文できちんと記述する必要があります。

そして、成人・未成年の両方の条件を満たさない、例えば負の数のときにはじめて「それ以外」を表すelse文を使用するのです。



正しい考え方は下記のようになります。

if(age >= 20) {
    System.out.println("成人です");
} else if(age < 20 && age >= 0) {
    System.out.println("未成年です");
} else {
    System.out.println("エラー");
}


このように、本来予期していない不正な値を捕まえるためにif文のelse文や、switch文のdefault句を用いるのは非常に良い手法とされています。



次に、「さらに、未成年の場合に限り次のような表示も行います。」の部分ですが、解答例のようにきちんとif文をネストして作成できたでしょうか。

ここはネストしないと条件式がゴチャゴチャしてしまうので注意が必要です。



最後に、義務教育を受けているかの判断ですが、次のようにコーディングした人もいるかもしれません。

if(age >= 6 && age <= 14) {
    System.out.println("今は義務教育を受けています");
} else {
    System.out.println("今は義務教育を受けていません");
}


作業指示通りに作成しなければいけないので、論理演算の解釈を自分の都合で勝手に変えてしまうのはダメです。


「プログラム的には正しく動作するじゃないか!どっちでも良いよ、そんなこと!」


こんなことを思ってしまってはダメです。

開発現場でも仕様書に従って「指示通りにプログラミングを行う」ことは非常に重要です。

プログラマが独断で判断して、仕様書の指示を覆してしまうと、後日そのプログラムと仕様書を見た別のプログラマは非常に精神的負担を背負うことになります。

なぜなら、その食い違いが疑心暗鬼の気持ちを生むからです。



仕様書に忠実に従ってプログラミングすることは、プログラマの信用にもつながります。

たとえ長い数式が出てきたとしても、約分などの数式変換をせずにそのままコーディングするべきです。


もちろん、仕様書に間違いを発見した場合はそのままコーディングしてはいけません。

必ず仕様書を作成した人に報告して仕様書の修正を依頼しましょう。


参考図書



LINE公式アカウント

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


LineOfficial

友だち追加