キーボードからの値の入力

5.6 キーボードからの値の入力

 続いて、キーボードからの文字入力の方法を学習します。
 これまで作成したプログラムは、主に画面に文字列を表示させるだけの単純なものでした。ここでは、キーボードからデータの入力を行い、その値をプログラムで利用するという方法を説明していきます。

5.6.1 キーボードからの値の入力を行う基本構文

 キーボードから値の入力を行うためには、次のようにプログラムに記述します。

 ①は、インポート文と呼ばれるもので、②を記述するために必要なものです。

 ②は、キーボード入力のための準備を行っています。

 ③は、記述したデータ型の変数を宣言し、そこにキーボードで入力した値を代入しています。③が実行された時、プログラムはキーボードからの入力待ちの状態になります。各データ型には対応するメソッドが決められています。
 データ型と対応するメソッドについては、表 5.6.1 を参考として下さい。

データ型 対応するメソッド
double nextDouble()
float nextFloat()
long nextLong()
int nextInt()
short nextShort()
byte nextByte()
boolean nextBoolean()
String nextLine()

表 5.6.1 : データ型とそれに対応するキーボード入力処理を行うメソッド


凡例 : キーボードからの int 型の数値入力

 この凡例は、キーボードからの int 型の数値を入力させるプログラムの一部分です。
 この場合、データ型は int 型なので、nextInt()を利用しています。受け取りたい値のデータ型が double 型であれば、nextDouble()、String 型であれば nextLine()というように、データ型に対応したメソッドを記述する必要があります。
 「int num = sc.nextInt();」の大まかな処理の流れとキーボード入力の方法は、次のページで解説します。

int num = sc.nextInt();の処理の流れとキーボード入力の方法
 sc.nextInt()が実行されると、キーボード入力待ちの状態になります。
 ※ キーボード入力待ちの状態かどうかを知るために、前の行に「数値を入力してください。>」など、 キーボード入力を促す内容のメッセージを表示しておくと、キーボードで入力するタイミングを教えてくれるので、わかりやすくなります。

 コンソールで文字列が表示されているところより下の空欄部分をクリックし、コンソールに文字入力ができる状態にします。

 ここでは、例として「3」と入力しています。入力を行ったら、「Enter キー」を押して入力を終了します。

5.6.2 入力された int 型の数値を表示するプログラム

 キーボードから数値の入力を求め、入力された値を int 型の変数に代入し、それを画面に表示します。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch5
③ 名前 :KeyBoardInputIntValue
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ KeyBoardInputIntValue.java

package jp.co.f1.intro.ch5;
	
import java.util.Scanner;
	
public class KeyBoardInputIntValue {
	
   public static void main(String[] args) {
	
      Scanner sc = new Scanner(System.in); 
      System.out.println("誕生月を入力して下さい。>"); 
      int birthMonth = sc.nextInt(); 
      System.out.println("あなたの誕生月は、" + birthMonth + "月です。"); 
	    		
   }
} 

実行結果

11 行目が実行中でキーボード入力待ちの画面


キーボード入力終了後の画面 ※「9」と入力した場合

解説

 3 行目は、キーボード入力を行うために必要な 1 つ目の記述です。パッケージ文のすぐ後ろに書く規則となっています。
   1: package wp.co.f1.intro.ch5;
   3: import wava.util.Scanner;

 9 行目は、キーボード入力を行うために必要な 2 つ目の記述です。main メソッドの中に書きます。
   9: Scanner sc = new Scanner(System.in);

 10 行目は、11 行目でキーボードからデータを入力するタイミングをわかりやすくするために、キーボード入力を促すメッセージ「誕生月を入力して下さい。>」を表示しています。
 11 行目はキーボード入力を求め、入力された値を int 型の変数 birthMonth へ代入しています。
 ここでは、例として「9」を入力した場合を説明します。11 行目が実行されると、まずキーボード待ちの状態になるので、コンソールをクリックしてカーソルをコンソールに移し、「9」と入力します。「Enter キー」を押し、入力を終了すると、次にキーボードから入力した値である「9」を変数 birthMonth に代入します。このイメージは図 5.6.1 になります。
   10: System.out.println("誕生月を入力して下さい>");
   11: int birthMonth = sc.nextInt();

図 5.6.1 : キーボードから入力した「9」を変数 num に代入


 12 行目では、変数 birthMonth と文字列を文字列連結し、「あなたの誕生月は、9 月です。」と表示させています。
   12: System.out.println("あなたの誕生月は、" + birthMonth + "月です。");

対応するデータ型以外の型のデータを入力した場合

このプログラムでは、int 型の値をキーボードから入力していましたが、もし int 型以外の値を入力した場合はどうなるのでしょうか。KeyBoardInputIntValue.java を実行し、int 型以外の値を入力してみましょう。
 ・ 小数点付きの値を入力した場合
  double 型の値、int 型に自動で変換できないため、実行時エラーになります。
 
 ・ 文字列を入力した場合
 文字列を入力した場合、int 型の数値に変換できず、実行時エラーになります。1 文字を入力した場合もここで char 型でなく文字列と判断されているため、エラーが発生します。


5.6.3 入力された文字列を parseInt()を使用し、int 型に変換するプログラム

 入力された値を String 型の変数に代入し、それを parseInt()を使用し、int 型に変換します。これを 2 回繰り返し、入力された 2 つの値を加算し、結果を表示します。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch5
③ 名前 :KeyBoardInputStringValue
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ KeyBoardInputStringValue.java

package jp.co.f1.intro.ch5; 
	
import java.util.Scanner;
	
public class KeyBoardInputStringValue {
	
   public static void main(String[] args) {
	
      Scanner sc = new Scanner(System.in); 
      System.out.println("1 つ目の数字を入力して下さい。>"); 
      String str = sc.nextLine(); 
      int num1 = Integer.parseInt(str); 
      System.out.println("2 つ目の数字を入力して下さい。>"); 
      str = sc.nextLine(); 
      int num2 = Integer.parseInt(str); 
      System.out.println(num1 + " + " + num2 + " = " + (num1 + num2)); 
	    		
   }
} 

実行結果

プログラム実行直後(11 行目が実行中でキーボード入力待ちの状態)


11 行目のキーボード待ちの状態でキーボードで「3」を入力した時


14 行目のキーボード待ちの状態でキーボードで「5」を入力した時


解説

 3 行目は、キーボード入力のための準備としてパッケージ文の後に以下の文を記述しています。
   3: import java.util.Scanner;


 9 行目は、キーボード入力のための準備として main メソッド内に以下の文を記述しています。
   9: Scanner sc = new Scanner(System.in);

 11 行目でキーボード入力処理を行うため、直前の 10 行目ではキーボード入力を促すメッセージを表示させています。
 11 行目は、実行するとキーボード入力待ちの状態になります。String 型の変数 str を宣言し、キーボードに入力された値を変数 str に代入します。
 ここでは、例として「3」が入力された場合について説明します。11 行目が実行され、キーボードからの入力待ちの状態になった時に「3」を入力すると、変数 str は”3″で初期化されます。
   10: System.out.println("1 つ目の数字を入力して下さい。>");
   11: String str = sc.nextLine();

 12 行目では、まず Integer.parseInt メソッドによって変数 str の値である”3″は int 型の値 3 に変換され、その後に変数 num1 に代入されます。
 Integer.parseInt は、メソッド名の後ろの括弧の中に入れた文字列を int 型の値として返すメソッドです。
 このイメージを図 5.6.2 に示します。
   12: int num1 = Integer.parseInt(str);

図 5.6.2 : Integer.parseInt メソッドを使った文字列の int 型への変換


 13~15 行目では、10~12 行目と同じように、もう一度キーボードからの入力を求め、入力された文字列をint 型の値に変換し、変数に代入しています。
 14 行目の実行時に「5」が入力された場合は、変数 num2 には 5 が代入されます。
   13: System.out.println("2 つ目の数字を入力して下さい。>");
   14: str = sc.nextLine();
   15: int num2 = Integer.parseInt(str);

 最後に、16 行目で変数 num1 と変数 num2 の加算を行い、それを表示します。
 11 行目のキーボード入力で「3」、14 行目で「5」が入力された場合は、「3 + 5 = 8」と表示されます。文字列連結として使われている+演算子と、加算として使われている+演算子があるので注意して下さい。
   16: System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));

Integer.parseInt メソッドとは

Integer.parseInt メソッドとは、括弧の中に入れた String 型の値を int 型に変換して返すものです。
 もし変換しようとした文字列が int 型と互換性がなかったり自動変換できない場合は、実行時エラーになり、プログラムが終了します。この場合は図 5.6.3 や図 5.6.4 のような表示になります。
 メソッドについては 9 章で詳しく学習しますので、今は Integer.parseInt メソッドの記述の形式と、処理の結果だけ知っておいて下さい。

図 5.6.3 : double 型の数値を入力した場合


図 5.6.4 : アルファベットを入力した場合




NEXT>> 5.7 本章のまとめ