java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

ScannerクラスのnextIntメソッド

投稿日:

最終更新日:2016年07月26日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今日はScannerクラスのnextIntメソッドを使ってみました。

フロー

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」が発生します。

「a」を入力した場合

数値を入力してください。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文がないと以下の文面が繰り返されてしまいました。

break文がない場合

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

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