1. を使用してコンソールから読み取るSystem.in

前のレッスンでは、画面に情報を表示するためのコマンドについて学習しました。System.outこれを行うために、オブジェクトとそのprint()メソッドを使用しましたprintln()。シンプルで便利です。

しかし、すでにご想像のとおり、画面に情報を表示するだけでは十分ではありません。ほとんどのプログラムの目的は、ユーザーにとって役立つことを行うことです。つまり、ユーザーがキーボードからデータを入力できることが非常に多くの場合必要になります。

出力の場合と同様に、データ入力用の特別なオブジェクトもあります — System.in。しかし、残念なことに、私たちにとって、それは私たちが望むほど便利ではありません。これにより、キーボードから一度に1 文字ずつデータを読み取ることができます。

System.inこれを改善するために、オブジェクトと組み合わせると必要なものすべてを提供する別のクラスを使用します。長い間、Java にはあらゆる場面に適したクラスが用意されてきました。そして、そのうちの 1 人について今から知りましょう。


2.Scannerクラス

クラスScanner(フルネーム: java.util.Scanner) は、コンソール、ファイル、インターネットなどのさまざまなソースからデータを読み取ることができます。キーボードからデータを読み取らせたい場合は、System.inデータ ソースとして機能するオブジェクトを引数として渡す必要があります。そして、Scanner オブジェクトはそれをどう扱うかを判断します。

オブジェクトを使用してキーボードから読み取ると、Scanner次のようになります。

コード 説明
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
オブジェクトを作成しますScanner。キーボードからテキスト行を
読み取ります。キーボードから 数字 を読み取ります。

簡単そうに見えますが、本当にそんなに簡単なのでしょうか?

たくさんの質問があると思いますが、ここでそれらに答えていきます。

その前に、このクラスを使用する完全なプログラムの例を示してみましょうScanner

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3.Scannerオブジェクトの作成

最初の質問は、この行は何ですかScanner console = new Scanner (System.in);?

この行は混乱を招くかもしれませんが、同様のことが常に表示されます。したがって、ここで何が起こっているのかを説明することが重要であると考えています。

通常、テキストを含む変数を作成する方法を思い出してください。

String str = "text";
文字列変数の宣言と初期化

まず、変数の型 ( String)、次にその名前 ( str)、最後に等号の後に値を書き込みます。

私たちの当惑するセリフも実際には同じです。

Scanner console = new Scanner(System.in);
Scanner変数の宣言と初期化

等号の左側にあるものはすべて、console型が であるという名前の変数の宣言ですScanners 代わりに、 またはscannerまたは と呼ぶこともできますkeyboard。その場合、コードは次のようになります。

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

そうすることですべてがより明確になると思います。

ただし、等号の右側のコードは少し複雑です。とはいえnew Scanner(System.in); 、ここでも超自然的なことは何も起こっていません。

このコードでは、Java マシンに次のように指示します。newタイプが である新しいオブジェクト (キーワード)を作成し、そのオブジェクトを新しく作成されたオブジェクトのデータ ソースとしてScanner 渡します。System.inScanner

 この行全体を実行すると、プログラムがキーボードからデータを読み取るために使用するScanner名前の変数が作成されます。console


4. メソッド一覧

上の例では、Scanner console変数にオブジェクトへの参照が格納されていますScanner

変数によって参照されるオブジェクトのメソッドを呼び出すには、変数名の後にピリオドを記述し、その後にメソッド名と引数を続けます。コマンドの一般的な外観は次のとおりです。

variable.method(arguments);
変数によって参照されるオブジェクトのメソッドの呼び出し

例:

System.out.println("Hello");
System.out.println(1);

関数に引数を渡す予定がない場合は、空の括弧を記述するだけです。

variable.method();
引数を渡さずにメソッドを呼び出す

例:

System.out.println();

5. コンソール入力

オブジェクトがあればScanner、キーボードからデータを簡単に取得できます。

キーボードから行を読み取るには、次のコマンドが必要です。

String str = console.nextLine();

プログラムの実行がこの行に到達すると、プログラムは一時停止し、ユーザーがデータを入力して Enter キーを押すのを待ちます。その後、ユーザーが入力した内容はすべて変数に保存されますstr

キーボードから数値を読み取るには、次のコマンドが必要です。

int number = console.nextInt();

ここでのすべては前のコマンドと似ています。プログラムの実行がこの行に到達すると、プログラムは一時停止し、ユーザーがデータを入力して Enter キーを押すのを待ちます。その後、ユーザーが入力した内容はすべて数値に変換され、number変数に保存されます。

ユーザーが整数に変換できないデータを入力した場合、プログラムはエラーを生成して終了します。

キーボードから小数を読み取るには、次のコマンドが必要です。

double number = console.nextDouble();

このステートメントはメソッドのステートメントとよく似ていますnextInt()が、入力されたデータが数値に変換できるかどうかをチェックする点が異なりますdouble

キーボードから 2 つの数値を読み取り、その合計を画面に表示するプログラムの例:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
ノート

ユーザーはスペースで区切って複数の数値を 1 行に入力できます。Scannerクラスのメソッドはこれを処理する方法を知っています。ただし、プログラムは、ユーザーが を押した後にのみ数値を読み取りますEnter



6.Scannerクラスのその他のメソッド

ちなみに、このScannerクラスが提供するのは上記のメソッドだけではありません。メソッドの完全なリストは次のようになります。

方法 説明
nextByte()
データを読み取り、データに変換します。byte
nextShort()
データを読み取り、データに変換します。short
nextInt()
データを読み取り、データに変換します。int
nextLong()
データを読み取り、データに変換します。long
nextFloat()
データを読み取り、データに変換します。float
nextDouble()
データを読み取り、データに変換します。double
nextBoolean()
データを読み取り、データに変換します。boolean
next()
1 つの「トークン」を読み取ります。トークンはスペースまたは Enter キーの押下で区切られます。
nextLine()
行全体を読み取ります

また、入力内の次のトークンを実際にフェッチせずに (どのメソッドを使用して読み取るかを知るために) チェックできるメソッドもあります。

方法 説明
hasNextByte()
あるのbyte?入力を ? に変換できますかbyte?
hasNextShort()
あるのshort?入力を ? に変換できますかshort?
hasNextInt()
あるのint?入力を?に変換できますかint?
hasNextLong()
あるのlong?入力を ? に変換できますかlong?
hasNextFloat()
あるのfloat?入力を ? に変換できますかfloat?
hasNextDouble()
あるのdouble?入力を ? に変換できますかdouble?
hasNextBoolean()
あるのboolean?入力を ? に変換できますかboolean?
hasNext()
別のトークンはありますか?
hasNextLine()
別の行はありますか?

7. 文字列からのデータの読み取り

このクラスはさまざまなソースからデータを読み取ることができると前述しましたScanner。それらのソースの 1 つはテキスト文字列です。

次のようになります。

String str = "text";
Scanner scanner = new Scanner(str);

オブジェクトを作成するときは、オブジェクトの代わりにScanner文字列を渡します。そしてオブジェクトは文字列からデータを読み取ります。例:strSystem.inscanner

プログラムコード: 説明:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}




// a == 10; 
// b == 20; 
画面出力は次のようになります。30