未来エンジニア養成所Blog

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

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

title


問題1-4

int型の変数valueが宣言してあります。変数valueは任意の整数をあらわしています。

まずは変数valueの値が偶数か奇数かを判定します。偶数の場合は「偶数です」と表示し、奇数の場合は「奇数です」と表示します。

負の数値でもきちんと偶数・奇数を判定してください。

次に、変数valueの値が3の倍数、4の倍数、5の倍数であるかの判定を行います。

3の倍数の場合は「3の倍数です」と表示します。

4の倍数の場合は「4の倍数です」と表示します。

5の倍数の場合は「5の倍数です」と表示します。

3の倍数かつ4の倍数の数値もあることに注意してください。

今回の練習問題はif文だけを使用し、繰り返し構文は使わないでください。


【実行結果】

value:16
偶数です
4の倍数です
value:-15
奇数です
3の倍数です
5の倍数です
value:60
偶数です
3の倍数です
4の倍数です
5の倍数です


【IfBasicPractice.java】

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

        // 整数変数の宣言と初期化
        int value = 16;        // ←値を変更しながら実行

        System.out.println("value:" + value);


        // if文の開始


    }
}


解答例

【IfBasicPractice.java】

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

        // 整数変数の宣言と初期化
        int value = 16;        // ←値を変更しながら実行

        System.out.println("value:" + value);


        // if文の開始
        // 偶数・奇数の判定
        if(value % 2 == 0) {
            System.out.println("偶数です");
        } else {
            System.out.println("奇数です");
        }

        // 3の倍数の判定
        if(value % 3 == 0) {
            System.out.println("3の倍数です");
        }

        // 4の倍数の判定
        if(value % 4 == 0) {
            System.out.println("4の倍数です");
        }

        // 5の倍数の判定
        if(value % 5 == 0) {
            System.out.println("5の倍数です");
        }
    }
}


解説

Javaの条件分岐構文はif文とswitch文の2つがあります。

if文はすべてのプログラミング言語に存在し、とても重要なのでしっかりマスターしましょう。


まずは対象の整数が偶数なのか奇数なのかを判定します。

偶数・奇数の判定方法で迷った人もいるかもしれませんね。


偶数というのは「2の倍数」、言い換えれば「2で割った余りが0」ということです。

つまり偶数の判定をJava的に記述すると次のようになります。

if(value % 2 == 0) {
    System.out.println("偶数です");
}


ここで注意ポイントです。


もしかしたら

「なるほど!じゃぁ奇数は2で割った余りが1ということだな!」


残念ながら、ちょっと違うのです。


実際に奇数を「2で割った余りが1」と判定するプログラムは下記のようになります。

if(value % 2 == 0) {
    System.out.println("偶数です");
} else if(value % 2 == 1) {
    System.out.println("奇数です");
}


Javaの剰余演算の結果は、左オペランド(「%」の左側の数値)の符号に従うというルールがあります。

つまり、負の奇数を2で割った余りは「-1」になります。


しかし、偶数は正・負を問わず、2で割った余りは「0」です。

なので、偶数判定はif文で、奇数判定はelse文で記述すれば良いということになります。

「偶数以外は奇数」しかあり得ないという考えです。

この関係を「排他」といいます。



次に、3の倍数・4の倍数・5の倍数の判定を行います。

下記のように記述した人はいないでしょうか。

if(value % 3 == 0) {
    System.out.println("3の倍数です");
} else if(value % 4 == 0) {
    System.out.println("4の倍数です");
} else if(value % 5 == 0) {
    System.out.println("5の倍数です");
}


確かにこの3つの判定はとてもよく似ています。

しかし、「3の倍数」かつ「4の倍数」である数値も存在していますので「排他の関係」ではありません

if文に対して else if文や else文を設けるのは、「排他の関係」、つまり「どれか1つだけ」の場合だけであることはしっかりと意識しましょう。

そうしないと、上記プログラムのようなバグを簡単に含んでしまうことになります。



Javaプログラミングにおいて、「コンパイルエラー」は怖れるに足りません。

それは単に修正して、再コンパイルすればすべて解決です。


しかし一番怖いのは「コンパイルは通るけど論理的に間違っている」プログラム、つまり「論理エラー」です。


「論理エラー」は、プログラマが見つけるしかありません。

単体テストや結合テスト時に「論理エラー」を発見することが多いですが、プログラマは常に意識して、最初から「論理エラー」を含めないという強い信念が必要です。


参考図書



LINE公式アカウント

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


LineOfficial

友だち追加