PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~入力ストリームでキーボード入力を読み込む~

      2016/03/12

今回はキーボードからのデータ入力についてお勉強します。

私はScannerしか使ったことなかったのですが、「Javaの絵本」に解説があったので

System.inやBufferdReaderを使った方法について学びます。

 

キーボードから半角1文字のデータ入力

 

キーボードから半角1文字のデータを入力するにはread()メソッドを使用します。

read()メソッドの前に「System.in」をつけて使います。

 

int a;
a = System.in.read();

 

行単位でデータを読み込む

 

行単位でデータを読み込むにはBufferedReaderクラスを使用します。

このクラスのオブジェクトはReaderクラスのオブジェクトを引数として受け取ります。

 

このクラスの持つreadLine()メソッドでは、読み込んだ1行のデータをString型で返します。

読み込むデータがなくなるとnullを返します。

 

それでは実際の例を見てみましょう。

import java.io.*;
import java.util.Random;

public class RandomNum {
	public static void main(String[] args){
		try {
			//キーボードからの入力を行単位で読み込むオブジェクト
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			
			//1~10まの内どれかをランダムで生成
			Random rand = new Random();
			int num = rand.nextInt(9) + 1;
			
			System.out.println("お名前は?");
			//入力した名前を行単位で読み込む
			String name = br.readLine();
			
			System.out.println("1~10のうちで数字を当ててください!");
			//入力した数字を行単位で読み込む
			String ch = br.readLine();
			//String型でchが返却されるのでintに変換
			int user = Integer.parseInt(ch);
			
			//ユーザーの入力値とランダムの数が等しくない間繰り返す
			int cnt = 1;	//while文のカウンタ
			while(user != num) {
				cnt = ++cnt;				
				if(user > num)
					System.out.println("もっと小さい数です。");
				else if (user < num)
					System.out.println("もっと大きい数です。");
				
				//新たなキーボード入力を受け付ける
				ch = br.readLine();
				user = Integer.parseInt(ch);
			}
			System.out.println("正解!");
			System.out.println(name + "さんは" +cnt + "回で当たりました。");
		
		//例外処理
		} catch (Exception e){
			System.out.println("エラーです。");
		}
		//finally省略
	}
}

 

以下の部分のコードはBufferdReaderクラスのオブジェクトの引数として、

生成したReaderクラスのオブジェクトを渡しています。(ここではInputStreamReaderクラス)

 

なのでバラすとこんな感じです。


//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

InputStreamReader isr = &nbsp;new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

 

このプログラムの流れはランダムで1~10のうちのどれかの数字を生成して、それを当てるといった内容です。

最初に聞かれる名前も、回答者が入力する答えもキーボードから入力します。

 

それを「System.in」でキーボード入力を受け付け、BufferedReaderクラスで行単位で読み込む

というわけです。

 

数字が当たるまで処理を繰り返します。数字を文字で入力したりなど例外が発生すると

catchの処理に入ります。

 

このクイズが4回で当たった場合はこんな結果になります。

お名前は?

RINA

1~10のうちで数字を当ててください!

1

もっと大きい数です。

2

もっと大きい数です。

3

もっと大きい数です。

4

正解!

RINAさんは4回で当たりました。

 

入力ストリームを使ったキーボード入力のデータ読み込みについては以上です。

 

勉強中はわかってるんですけど、あとからブログを見返すとこれ何だったけ?となることがあるので

やっぱり復習も必要だなと最近思いました(;´∀`)

 

人気ブログランキング

 -