Javaでキーボード入力を読み取るときScannerクラスを利用する。
しかし、通常使うnextメソッドを使うとすべて文字列として認識してしまう。このページでは、キーボード入力の型を指定する方法についてお伝えした。
特定の型のみ読み込む
Javaでキーボードから入力された文字や数字を読み取るには、Scannerクラスのnextメソッドを使う。
nextメソッドでは何を入力しても、例えば数値「123」と入力しても、全てを文字列として認識して出力する。そのため、何を入力しても問題ないのだが、数値だけを入力したい場合などは困ってしまう。Scannerクラスにはそういった場合に数値だけを入力できるメソッドが用意されている。
数値型のnextIntメソッド
まず、入力された値を数値の型「int」として出力するScannerクラスのnextIntメソッドをみてみよう。
1 2 3 4 5 6 7 8 9 |
import java.util.Scanner; class sampleA { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.println("数値を入力してください。"); int num = scanner.nextInt(); //・・・① System.out.println("入力した数値は " + num + " です。"); } } |
①でnextIntメソッド使って読み込んだ値を変数numに保存している。nextメソッドを使うときと比べてみよう。nextメソッドを使うときは以下のように書く。
String num = scanner.next();
以下のnextIntを使うときとnextメソッドを使うときの違いは、まずメソッド名(nextとnextInt)の違いと読み込んだ値を格納する変数の型が違うという2点だ。nextIntを使うときは保存する変数の型をStringなどにするとコンパイルエラーになる。
int num = scanner.nextInt();
sampleAクラスを実行して、「1234567」と入力して、改行した場合の実行結果は以下のようになる。
1 2 3 |
数値を入力してください。 1234567 入力した数値は 1234567 です。 |
int以外のnext~メソッド
サンプルプログラムのsampleAクラスではint型のnextIntメソッドの処理を確認したが、Scannerクラスにはint型以外の型を指定できるメソッドが用意されている。
小数点の型のみを指定するnextDoubleメソッドや、trueかfalseのnextBooleanメソッドなど状況に応じて型を指定するものなどがある。
要するにそのまま書けばいい。
型違いのエラーに注意
nextIntメソッドなど型を指定する読み込みは、int型の数値以外の値を入力されたときを考えてプログラミングしなければならない。先ほどのsampleAクラスを実行して「あいうえお」と入力してみよう。
すると以下のようなエラーになる。
1 2 3 4 5 6 7 8 |
数値を入力してください。 あいうえお 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 sampleA.main(sampleA.java:6) |
このエラーはsampleAクラスのnexIntメソッドで数値以外が入力されたので発生したエラーだ。このように指定した型以外が入力されるとエラーでプログラムが終了してしまうので、try catchでエラーが発生してもプログラムが終了しないようにしなければならない。
try catchを追加したのが以下のサンプルコードだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.Scanner; import java.util.InputMismatchException; class sampleB { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); try { System.out.println("数値を入力してください。"); int num = scanner.nextInt(); System.out.println("入力した数値は " + num + " です。"); } catch (InputMismatchException e) { System.out.println("数値以外が入力されました。"); } } } |
sampleBクラスを実行して、「あいうえお」と入力して、改行した場合の実行結果は以下のようになる。
1 2 3 |
数値を入力してください。 あいうえお 数値以外が入力されました。 |
まとめ
このページではキーボード入力の際に、型を指定する方法についてお伝えしてきた。
Javaは厳密な言語なので、こういった指定にも方法が用意されている。数字などとして読み込みたいときのために認識しておこう。
コメント