今回からサンプルプルグラムを載せていく、ということを試みたいと思います!
課題形式だったり、あるいは実用例などを書いていく予定です。
少しでもご参考になればと思います。
1回目である今回は、簡単な課題を出してみます。
では早速
■問題
「入力された数が5で割り切れるかどうかを判定するプログラムを作成せよ。
ただし、負の数が入力されたら判定せずにメッセージを表示すること。」
一見簡単そうに見えますが、間違える人が多かったプログラムです。
ではまず間違いの例を挙げてみます。
■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("負の値です"); } } }
■実行結果
これがよく間違えるパターンです。
実行結果をみてみると、負の値の判定ができていませんね。
この原因は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;」と書くとその時点でメソッドの処理が終了する。
他にも書き方はたくさんあるかと思います。
ぜひご自身でも考えてみてください!