スキャナーのキーボード入力
概要
>(green!)
現在、Java プログラムを作成する場合、データはハードコード化されて固定化されていますが、プログラムをより柔軟にするために、データを柔軟に入力する必要がある場合があります。
Scanner の機能は、キーボードからのデータ入力を柔軟に受け取ることです。
しかし、実際の開発におけるデータは、フロントエンド ページ (ユーザー入力、アップロードなど) からのものです。そのため、一般的に、スキャナーは Web 開発にあまり実用的な影響を与えません。
しかし、JavaSE の学習段階では、フロントエンドや各種インターフェースの入力情報がありません.スタンドアロンの場合、スキャナーのキーボード入力を使用することは、プログラムの柔軟性を向上させる非常に良い選択です.
また、一部のテスト シナリオでは、スキャナーのキーボード入力にも特定の用途があるため、スキャナーについて学ぶ必要があります。
使用手順
>(green!)
では、スキャナーのキーボード入力はどのように使用すればよいのでしょうか?
大まかに以下の3段階に分けられます。
パッケージのインポート (IDEA にはパッケージの自動インポート機能がありますが、そのような手順はないと思います)
import java.util.Scanner;
オブジェクトを作成
Scanner sc = new Scanner(System.in);
キーボードから入力されたデータを受け取る
int x = sc.nextInt();
予防:
この段階では、ステップが使用されることを覚えておいてください。後で、各ステップが何をしているのかを詳しく分析しましょう。
一般に、使いやすさのために、キーボード入力を促す出力ステートメントを追加する必要があります。
次のコード例を参照してください。
キーボード入力 int データ
Scanner sc = new Scanner(System.in); // 键盘接收int数据 System.out.println("请输入一个int数据:"); int num = sc.nextInt();
Scanner を使用してデータを個別に入力する場合、さまざまな方法を選択できます。次に例を示します。
- キーボード入力 String 文字列、nextLine メソッドの使用を選択できます。
- キーボード入力の int 値。nextInt メソッドの使用を選択できます。
- キーボードで double 値を入力するには、nextDouble メソッドの使用を選択できます。
- …
Scanner を使用して複数のデータ型を入力する場合は、上記の方法を混在させないことをお勧めします。例えば:
Scanner のさまざまな方法を使用して複数のデータを入力する
int num = sc.nextInt(); String str = sc.nextLine();
この書き方は実は間違っている!
複数のタイプのデータを入力する必要がある場合は、常に nextLine メソッドを使用してから、文字列をさまざまな必要なデータ タイプに変換することをお勧めします。
次のコードを参照してください。
nextLine メソッドを均一に使用する
Scanner sc = new Scanner(System.in); System.out.println("请键盘录入一个int整数:"); String numStr = sc.nextLine(); // 百度查找将String转换成int的方法 int num = Integer.parseInt(numStr); System.out.println("请键盘录入一个字符串:"); String str = sc.nextLine(); System.out.println(num); System.out.println(str);
もちろん、上記の使用法に疑問がある場合は、引き続き読み進めて理由を学ぶことができます。
でもスキャナー自体は内容を理解している人なので、理由を知っているかどうかは関係ありません!
理由
>(green!)
Scanner の使用、 next()、nextInt() 、nextLine()などの一連のメソッドの違い:
- next() や nextInt() などの一連のメソッド
- next() などの一連のメソッドは、最初の有効な文字 (非スペース、非改行、非タブ) に遭遇したときにスキャンを開始します。
- 最初の区切り文字またはターミネータ (スペース、改行、またはタブ) に遭遇すると、スキャンが終了し、スキャンされたコンテンツが取得されます
- つまり、スペースと改行を含まない、最初にスキャンされた単一の文字列を取得します
- nextLine() メソッド
- メソッド名からわかるように、このメソッドは行の内容を取得し、文字列として受け取るメソッドです。
- このメソッドは、スペースまたはタブが原因でスキャンを終了しません
- キャリッジ リターン (ライン フィード) によりスキャンが終了するだけです。
>(red!)
nextLine() メソッドは、改行に遭遇するとスキャンを終了するという特性により、使用時に次の問題が発生します。
Scanner を使用して数値型を受け取り、次に nextLine() メソッドを使用して文字列を受け取る場合、たとえば次のコード:
2 つの Scanner メソッドの混合
Scanner sc = new Scanner(System.in); sc.nextInt(); sc.nextLine();
値を入力して Enter キーを押すと、プログラムは文字列を待機して受信するのではなく、キーボード入力を直接終了します。その理由は、nextLine() メソッドがキャリッジ リターンに遭遇するとスキャンを終了するためです。そのため、この時点でメソッドが受け取るのは実際には (完全に) 空の文字列です。
多くの解決策があります:
異なる Scanner オブジェクトを使用して受信できるため、競合があってはなりません
intデータ受信後、改行を受信するデータを受信しないnextLineを追加
文字列を受け取るには next() メソッドを使用しますが、このメソッドは区切り文字で終了し、行ではないことに注意してください。
文字列を統一して数値型を受け取り、受け取った後に型変換を行うことができます。(やり方、バイドゥは自分でできます)
例:int型に変換(文字列を渡してintに変換して受け取る)
Integer.parseInt()
練習
>(red!)
3 つの簡単な練習問題
- キーボードは 2 つの int データを入力し、2 つの int データを合計して結果を出力します。
- キーボードから 2 つの値を入力して、2 つの値の最大値を取得します。
- int 型、String 型、double 型の 3 つのデータを同時に入力してしまいます。
>(green!)
参照コードは次のとおりです。
参照コード 1
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入两个int数值:"); int num1 = sc.nextInt(); int num2 = sc.nextInt(); System.out.println("这两个数值的和是:" + (num1 + num2)); }
参照コード 2
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入两个int数值:"); int num1 = sc.nextInt(); int num2 = sc.nextInt(); System.out.println("这两个数值的最大值是:" + ((num1 > num2) ? num1 : num2)); }
参照コード 3
public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 混合录入数据类型时,统一使用nextLine方法 System.out.println("请输入一个int整数:"); String numStr = sc.nextLine(); int num = Integer.parseInt(numStr); System.out.println("请输入一个字符串:"); String str = sc.nextLine(); System.out.println("请输入一个double数据:"); String doubleStr = sc.nextLine(); double doubleNum = Double.parseDouble(doubleStr); }