キーボードからの値の入力
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つ目の記述です。パッケージ文の後に書く規則となっています。
9行目は、キーボード入力を行うために必要な2つ目の記述です。mainメソッドの中に書きます。
9行目の変数名scは任意です。ここでは変数scに合わせて説明していきます。キーボードからデータを入力するタイミングをわかりやすくするために、10行目でキーボード入力を促すメッセージを表示しています。
11行目はキーボード入力を求め、入力された値をString型の変数nameへ代入しています。
ここでは、例として「神田太郎」を入力した場合を説明します。11行目が実行されると、まずキーボード待ちの状態になるので、コンソールをクリックしてカーソルをコンソールに移し、「神田太郎」と入力します。その後に「Enterキー」を押すと、入力は終了します。キーボードから入力した値である「神田太郎」は変数nameに代入しています。このイメージを図 5.4.1に示します。
図5.4.1 キーボードから入力した「神田太郎」を変数nameに代入
12行目では、変数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文はパッケージ文の後に記述する規則になっています。
9行目は、キーボード入力のための準備としてmainメソッド内に以下の文を記述しています。
10行目ではキーボード入力を促すメッセージを表示しています。
11行目は、実行するとキーボード入力待ちの状態になります。int型の変数num1を宣言し、キーボードに入力された値を変数num1に代入します。
ここでは、例として「3」が入力された場合について説明します。11行目が実行され、キーボードからの入力待ちの状態になった時に「3」を入力すると、変数intに3が初期化(代入)されます。
12、13行目では、10、11行目と同じように、もう一度キーボードからの入力を求め、入力された数値をint型の変数num2に代入しています。
13行目の実行時に「5」が入力された場合は、変数num2に5が代入されます。
最後に、15行目で変数num1と変数num2の加算を行い、その結果を表示しています。
11行目のキーボード入力で「3」、13行目で「5」が入力された場合は、「3 + 5 = 8」と表示されます。文字列連結として使われている+演算子と、加算として使われている+演算子があるので注意して下さい。
対応するデータ型以外の型のデータを入力した場合
このプログラムでは、int型の値をキーボードから入力しています。もしint型以外の値を入力した場合はどうなるのでしょうか。KeyBordInputIntValue.javaを実行し、int型以外の値を入力してみましょう。
・ 小数点付きの値を入力した場合
double型の値は、int型にはならないので、実行時エラーになります。
・ 文字列を入力した場合
文字を入力した場合は、int型の数値に変換できず、実行時エラーになります。