Javaでのコンソール入力(Scannerクラスによる数値入力)
Javaでコンソール入力を行う方法について。
今回はScannerクラスを用いた標準入力の方法を紹介します。
持っているテキストで紹介されているのは、入力された値を文字列として扱う方法でしたので書式を次に示します。
java.util.Scanner (変数) = new java.util.Scanner(System.in);
String (変数2) = (変数).nextLine();
// 今回は(変数)をsc (変数2)をinpとしてみます。
java.util.Scanner sc = new java.util.Scanner(System.in);
String inp = sc.nextLine();
ですが、これだと数値を入力しても文字列として認識されてしまいます。
そこで文字列が数字列だった場合、数値に変換するメソッドを利用します。Integer.parseInt() // カッコ内の数字列をInt型の数値に変換(大文字可、マイナス可ただしマイナス記号は半角に限る、小数点不可、数値以外の場合はエラー)
これを使ってみます。
java.util.Scanner sc = new java.util.Scanner(System.in);
String inp = sc.nextLine();
int x = Integer.parseInt(inp);
xという変数を宣言してその中に変換した数値を代入してみました。
しかし、これだと入力値をinpに代入して、それをさらにxに代入するという手間がかかっています。
そこで2行目を省略してみます。
java.util.Scanner sc = new java.util.Scanner(System.in);
int x = Integer.parseInt(sc.nextLine());
これだとカッコの中にカッコが入り見栄えが悪いですね。
ここまできていきなりですが、実は最初から文字列ではなく数値として認識させる方法があるのです。
nextLineのLineをIntに変えるとInt型として、Doubleに変えるとDouble型として認識してくれます(最初からそれ使えよ!というツッコミは無視)
今回はInt型のxに代入するのでInt型で認識させてみます。
java.util.Scanner sc = new java.util.Scanner(System.in);
int x = sc.nextInt();
それでもまだ長いです。
そもそも最初の行が何してるかわからない人も多くいるでしょうし、2度も”java.util.Scanner”を記述するのは面倒ですね。
ということでこれを省略します。
importを使って”import java.util.Scanner;”を宣言しておけば後はScannerと記述するだけでjava.util.Scannerとして認識してくれます。
(”import java.util.Scanner;”を記述する必要あり)
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
かなりすっきりしてきました。
(余談ですが、Eclipseだと”import java.util.Scanner;”を記述しなくても自動的に挿入してくれます。)
しかし、C言語だと1行で済むのにJavaだと2行かかってしまってしまいます。
そこで、これを無理やり1行にまとめてみます。
(”import java.util.Scanner;”を記述する必要あり)
int x = new Scanner(System.in).nextInt;
かなり無理やりですがなんとか1行で表せました。
しかし、”import java.util.Scanner;”の記述が嫌な人もいるでしょうからこれをさらに書き換えます。
int x = new java.util.Scanner(System.in).nextInt;
なんとか1行だけで表すことが出来ました。
これらをまとめると次のようになります。
java.util.Scanner sc = new java.util.Scanner(System.in);
String inp = sc.nextLine();
int x = Integer.parseInt(inp);
↓
java.util.Scanner sc = new java.util.Scanner(System.in);
int x = Integer.parseInt(sc.nextLine());
↓
java.util.Scanner sc = new java.util.Scanner(System.in);
int x = sc.nextInt();
↓
(”import java.util.Scanner;”を記述する必要あり)
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
↓
(”import java.util.Scanner;”を記述する必要あり)
int x = new Scanner(System.in).nextInt;
↓
int x = new java.util.Scanner(System.in).nextInt;
Scannerクラスでどこまで出来るかな~と挑戦したらこのような結果になりました。