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

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

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

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

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

 書式 : キーボードからの値を入力する。

  パッケージ文を記述します。               
  ①import java.util.Scanner;             
  ②Scanner 変数名1 = new Scanner(System.in); 
   キーボード入力を促すメッセージの表示         
  ③データ型 変数名2 = 変数名1.メソッド名;      

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

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

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

データ型

対応するメソッド

double

nextDouble()

float

nextFloat()

long

nextLong()

int

nextInt()

short

nextShort()

byte

nextByte()

boolean

nextBoolean()

String

nextLine()

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

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

  package jp.co.f1.superintro.ch05;             
  import java.util.Scanner;                 
  public class InputIntValue {                
    public static void main(String[] args) {        
      Scanner sc = new Scanner(System.in);      
      System.out.print(“数値を入力してください。>”);  
      int num = sc.nextInt();              
  (以下略)                           

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

int num = sc.nextInt();の処理の流れとキーボード入力の方法

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

 コンソールで文字列が表示されている部分をクリックし、コンソールに文字入力ができる状態にします。

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

5.4.2 キーボードから入力されたString型の値を表示するプログラム

キーボードから入力した値をString型の変数に代入し、その入力値を文字連結して画面に表示してみましょう。

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

➢ KeyBordInputStringValue.java

  package jp.co.f1.superintro.ch05;
 
 import java.util.Scanner;
 
 public class KeyBordInputIntValue{
 	
 	public static void main(String[] args) {
 		
 		Scanner sc = new Scanner(System.in);
  		System.out.print("名前を入力して下さい>");
  		String name = sc.nextLine();
  		System.out.println("私の名前は、" + name + "です。"); 
  		
  	}
  
  }

        

実行結果

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

キーボード入力終了後の画面  (神田太郎」と入力した場合)

解説

 3行目は、キーボード入力を行うために必要な1つ目の記述です。パッケージ文の後に書く規則となっています。

   1: package jp.co.f1.superintro.ch05;
   3: import java.util.Scanner;

 9行目は、キーボード入力を行うために必要な2つ目の記述です。mainメソッドの中に書きます。

   9: Scanner sc = new Scanner(System.in);

 9行目の変数名scは任意です。ここでは変数scに合わせて説明していきます。キーボードからデータを入力するタイミングをわかりやすくするために、10行目でキーボード入力を促すメッセージを表示しています。
 11行目はキーボード入力を求め、入力された値をString型の変数nameへ代入しています。
 ここでは、例として「神田太郎」を入力した場合を説明します。11行目が実行されると、まずキーボード待ちの状態になるので、コンソールをクリックしてカーソルをコンソールに移し、「神田太郎」と入力します。その後に「Enterキー」を押すと、入力は終了します。キーボードから入力した値である「神田太郎」は変数nameに代入しています。このイメージを図 5.4.1に示します。

   10: System.out.print("名前を入力して下さい>");
   11: String name = sc.nextLine();

図5.4.1 キーボードから入力した「神田太郎」を変数nameに代入

 12行目では、変数nameと文字列を文字列連結し、「私の名前は、神田太郎です。」と表示させます。

   12: System.out.println("私の名前は、" + name + "です。");

5.4.3 キーボード入力された数値を使って足し算するプログラム

キーボードから2つの数値を入力してint型の変数に代入します。その2つの入力値を使って、足し算の結果を画面に表示してみましょう。

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

➢ KeyBordInputIntValue.java

   package jp.co.f1.superintro.ch05;
 
 import java.util.Scanner;
 
 public class KeyBordInputIntValue {
 
 	public static void main(String[] args) {
 
 		Scanner sc = new Scanner(System.in);
  		System.out.print("1つ目の数字を入力して下さい>");
  		int num1 = sc.nextInt();
  		System.out.print("2つ目の数字を入力して下さい>");
  		int num2 = sc.nextInt();
  
  		System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));		
  	}
  }
        

実行結果

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

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

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

解説

 3行目は、キーボード入力のための準備として、import文はパッケージ文の後に記述する規則になっています。

   3: import java.util.Scanner;

 9行目は、キーボード入力のための準備としてmainメソッド内に以下の文を記述しています。

   9: Scanner sc = new Scanner(System.in);

 10行目ではキーボード入力を促すメッセージを表示しています。
 11行目は、実行するとキーボード入力待ちの状態になります。int型の変数num1を宣言し、キーボードに入力された値を変数num1に代入します。
 ここでは、例として「3」が入力された場合について説明します。11行目が実行され、キーボードからの入力待ちの状態になった時に「3」を入力すると、変数intに3が初期化(代入)されます。

   10: System.out.println("1つ目の数字を入力して下さい。>");
   11: String num1= sc.nextInt();

 12、13行目では、10、11行目と同じように、もう一度キーボードからの入力を求め、入力された数値をint型の変数num2に代入しています。
 13行目の実行時に「5」が入力された場合は、変数num2に5が代入されます。

   12: System.out.print("2つ目の数字を入力して下さい>");
   13: int num2 = sc.nextInt();

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

   15: System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));

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

 このプログラムでは、int型の値をキーボードから入力しています。もしint型以外の値を入力した場合はどうなるのでしょうか。KeyBordInputIntValue.javaを実行し、int型以外の値を入力してみましょう。

・ 小数点付きの値を入力した場合
  double型の値は、int型にはならないので、実行時エラーになります。

・ 文字列を入力した場合
  文字を入力した場合は、int型の数値に変換できず、実行時エラーになります。

NEXT>> 5.5 本章のまとめ