こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

ScannerクラスのnextIntメソッド

こんにちは。「Javaを復習する初心者」です。今日はScannerクラスのnextIntメソッドを使ってみました。このメソッドは入力された数値を返却してくれます。

「Scanner(System.in)」と書いてコンソールから入力するプログラムを書くことができます。今回は入力された数値を加算していくプログラムを書いてみました。

以下にフローを書きます。

  1. Scanner型scanner変数にnew Scanner(System.in)の戻り値を格納する。
  2. int型変数totalを宣言し、0で初期化する。
  3. 以下の処理を繰り返す。
    1. 以下を出力する。
      “数値を入力してください。0を入力すると終了です。”
    2. int型変数numを宣言し、scanner.nextInt()の戻り値を格納する。
      1. もし0が入力された場合、ループを抜ける。
      2. それ以外の場合、処理を進める。
    3. 変数totalに変数numを加算する。

nextInt()メソッド

package scannerTest;

import java.util.Scanner;

public class HelloNextInt {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int total = 0;
        while (true) {
            System.out.println("数値を入力してください。0を入力すると終了です。");
            int num = scanner.nextInt();
            if (num == 0) {
                break;
            }
            total += num;
        }

        scanner.close();

        System.out.println("合計:" + total);

    }

}
数値を入力してください。0を入力すると終了です。
1
数値を入力してください。0を入力すると終了です。
2
数値を入力してください。0を入力すると終了です。
5
数値を入力してください。0を入力すると終了です。
9
数値を入力してください。0を入力すると終了です。
0
合計:17

try-catch節を追加

nextInt()メソッドは入力値が整数値に変換できるのが前提です。例えば、「a」など入力すると「java.util.InputMismatchException」が発生します。

数値を入力してください。0を入力すると終了です。
a
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at scannerTest.HelloNextInt.main(HelloNextInt.java:14)

このままだと、例外がスローされてスタックトレースが出力されて終わってしまうので、try-catch節を追加します。catch節では”入力が数値ではありません。”を出力し、ループを抜けるようにしました。

以下はソースと実行結果です。

package scannerTest;

import java.util.InputMismatchException;
import java.util.Scanner;

public class HelloNextIntTryCatch {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int total = 0;
        while (true) {
            System.out.println("数値を入力してください。0を入力すると終了です。");
            try {
                int num = scanner.nextInt();
                if (num == 0) {
                    break;
                }
                total += num;
            } catch (InputMismatchException e) {
                System.out.println("入力が数値ではありません。");
                break;
            }
        }

        scanner.close();

        System.out.println("合計:" + total);

    }

}
数値を入力してください。0を入力すると終了です。
1
数値を入力してください。0を入力すると終了です。
2
数値を入力してください。0を入力すると終了です。
3
数値を入力してください。0を入力すると終了です。
a
入力が数値ではありません。
合計:6

上記プログラムでcatch節でbreak文を記述し、ループを抜けて処理を終えるようにしました。break文がないと以下の文面が繰り返されてしまいました。

入力が数値ではありません。
数値を入力してください。0を入力すると終了です。
入力が数値ではありません。
数値を入力してください。0を入力すると終了です。
入力が数値ではありません。
・
・
・

なぜこのような現象になるのか、わかりませんでしたので、今回はbreak文で処理を終えるようにしました。