Javaプログラムでのデータ入力方法
Javaを初めて使う人は、Javaのプログラムにデータを入力する方法について、私と同じように戸惑っていることでしょう。最初はCやC++のscanfやcinのようなものだと素朴に思っていましたが、実はJavaにはscanfやcinはありません。
いくつかのブログを読んで、Javaでのデータ入力の仕方を少し勉強したのですが(でもお偉いさんのブログもあって、白人の私にはよくわかりませんでした)、その中でとても使いやすいと感じたものがあります。
一番簡単で便利だと思うのはこちら、Scannerクラスです。
まずは、以下のコードの仕様に基づき、Scannerの使い方を簡単に説明します。
package first;
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);//define scanner, wait for input
System.out.println("Please enter your name:");
String name = in.nextLine();//character type of input
System.out.println(name);
System.out.println("Please enter your age: ");
int age = in.nextInt();//integer type of input
System.out.println(age);
System.out.println("Please enter your height: ");
double height = in.nextDouble();// decimal type of input
System.out.println(height);
}
}
Scannerクラスはjava.util.Scannerパッケージ内にあるので、プログラムにこのパッケージを前置してください。
Scanner in = new Scanner(System.in);の行がポイントです。この文の意味は、new Scanner(System.in) で Scanner を作成し、コンソールが Enter キーを押す最後まで入力を待ち、その入力を Scanner にスキャンオブジェクトとして渡しているということです。
そして、入力を取得したい場合は、ScannerのnextLine()メソッドを呼び出す必要があるので、String name = in.nextLine(), int age = in.nextInt(), double height = in.nextDouble() を使って、入力を取得する .
コードが示すように、Scannerクラスは、文字列、整数、浮動小数点型のいずれであっても、入力関数を実装するためにわずかな変更を加えるだけで、非常に使い勝手のよいクラスとなります。
しかし、ここで一つ注意しなければならないのは、このコードのように、nextLine()メソッドがキャリッジリターンを食べてしまうことです。
package first;
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);//define scanner, wait for input
System.out.println("Please enter your name:");
String name = in.nextLine();//character type of input
System.out.println(name);
System.out.println("Please enter your age: ");
int age = in.nextInt();//integer type of input
System.out.println(age);
System.out.println("Please enter the apple in English: ");
//String s = in.next();
String s = in.nextLine();
System.out.println(s);
System.out.println("Please enter your height: ");
double height = in.nextDouble();// decimal type of input
System.out.println(height);
}
}
実行してみると、このプログラムではappleの英語を入力することができず、carが返されるだけであることがわかる。これは、年齢を入力した後のキャリッジリターンがnextLine()に食われるためで、何も出力されませんが、in.next()を使えば出力されます。
(以下、両方の実行結果です)
in.nextLine()を実行した結果です。
これはin.next()を実行した結果です。
最後に、nextLine()とnext()の違いについて補足します。
nextLine()メソッドは、Enterキーより前のすべての文字を返すので、スペースを含む文字列を取得することが可能です。
next() は、有効な文字の前にあるスペースを自動的に除去し、スペースを含む文字列ではなく、入力された文字のみを返します。
<スパン 更新してください。
スペースを含む文字列を入力する場合は、次のように in.nextLine(); というステートメントを追加して、キャリッジリターンを食べさせることができます。
package first;
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);//define scanner, wait for input
System.out.println("Please enter your name:");
String name = in.nextLine();//character type of input
System.out.println(name);
System.out.println("Please enter your age: ");
int age = in.nextInt();//integer type of input
System.out.println(age);
System.out.println("Please enter the apple in English: ");
//String s = in.next();
in.nextLine(); //eat the carriage return character
String s = in.nextLine();
System.out.println(s);
System.out.println("Please enter your height: ");
double height = in.nextDouble();// decimal type of input
System.out.println(height);
}
}
実行結果は以下の通りです。
関連
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
-bash: java: コマンドが見つからない 解決方法
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Java基礎 - マッピングとQ/A
-
Java小ネタ:Listはadd(null)できる?
-
Java の例外 #クラスパスが複数の SLF4J バインディングを含んでいます。
-
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException を解決します。
-
jdkのバージョンによってIntellij IDEAのコンパイルエラーが発生する:org/jetbrains/jps/incremental/messages/BuildMessage$Kind
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
強制型変換について
-
無効な文字定数
-
Junitのユニットテストはjava.lang.Testを報告します。
-
コレクション - PriorityQueueソースコード解析
-
javax.net.ssl.SSLHandshakeException: リモートホストがハンドシェイク中に接続を閉じた 解決までの道のりは険しい
-
Javaエラー:varが型に解決できないを解決する
-
MyBatis のクエリデータをプロパティで多対一処理する(1つのデータに対して複数のデータ)
-
ネストした例外がcom.fastxml.jackson.databind.exc.InvalidDefinitionExceptionであることを解決します。
-
AOP -- アノテーション @Aspect, @Pointcut