続・とってもわかりやすいJAVA 【サンプルプログラム① if文】

この記事は2015年12月22日に書かれたものです。内容が古い可能性がありますのでご注意ください。


今回からサンプルプルグラムを載せていく、ということを試みたいと思います!
課題形式だったり、あるいは実用例などを書いていく予定です。
少しでもご参考になればと思います。

1回目である今回は、簡単な課題を出してみます。
では早速

問題

「入力された数が5で割り切れるかどうかを判定するプログラムを作成せよ。
ただし、負の数が入力されたら判定せずにメッセージを表示すること。」

サンプルプログラム1_01

一見簡単そうに見えますが、間違える人が多かったプログラムです。

ではまず間違いの例を挙げてみます。

Practice_01.java(間違いの例)

import java.util.Scanner;

public class Practice_01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("5で割り切れるか判定します。");
        System.out.print("正の整数を入力して下さい : ");
        int n = sc.nextInt();

        if (n % 5 == 0) {
            System.out.println("5で割り切れます");
        } else if (n % 5 != 0) {
            System.out.println("5で割り切れません");
        } else if (n < 0) {
            System.out.println("負の値です");
        }
    }
}

実行結果

サンプルプログラム1_02

これがよく間違えるパターンです。
実行結果をみてみると、負の値の判定ができていませんね。

この原因はif文にあります。
上のプログラムは3つに条件分岐していますが、if文は上から順番に条件判定が行われます。
そしてtrueが返ってきたところの処理が実行され、そこから下は判定が行われません。
したがって、「-10」を入力すると5で割って余り0となるので、負の値の判定まで処理が移らないのです。

では正しいプログラムをみてみましょう!

Practice_01.java

import java.util.Scanner;

public class Practice_01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("5で割り切れるか判定します。");
        System.out.print("正の整数を入力して下さい : ");
        int n = sc.nextInt();

        if (n < 0) {
            System.out.println("負の値です");
        } else {
            if (n % 5 == 0) {
                System.out.println("5で割り切れます");
            } else {
                System.out.println("5で割り切れません");
            }
        }
    }
}

正しいプログラムでは、最初に負の値の判定を行っています。
こうすれば0以上の整数のみが5で割り切れるかどうかの判定に移ることができるわけです。

別の書き方も1つあげておきましょう。

Practice_01.java(別解)

import java.util.Scanner;

public class Practice_01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("5で割り切れるか判定します。");
        System.out.print("正の整数を入力して下さい : ");
        int n = sc.nextInt();

        if (n < 0) {
            System.out.println("負の値です");
            return; //この時点でmain()メソッド終了
        }

        if (n % 5 == 0) {
            System.out.println("5で割り切れます");
        } else {
            System.out.println("5で割り切れません");
        }
    }
}

この書き方では、if文が入れ子になりません。値が負の場合はメッセージを出力してreturn。
つまりこの時点でmain()メソッドが終了となります。
すると5で割り切れるかの判定に処理が移らなくなります。

まとめ

・if文の条件判定は上から下へ順番に、そしてtrueが返ってきた箇所の処理が実行された時点で、他の判定は行われません。

・戻り値がvoidの場合でも、「return;」と書くとその時点でメソッドの処理が終了する。

他にも書き方はたくさんあるかと思います。
ぜひご自身でも考えてみてください!

  • このエントリーをはてなブックマークに追加

PAGE TOP