元小学校教員!がIT企業へ転職したリアルなブログ

公立の小学校教員を4年間勤めた後、IT企業へ転職しました。教育・転職・ITに関する情報を発信していきます。

【初心者】【JavaでHigh&Lowゲームをつくってみた】~その②~

f:id:akiho817:20200420204848j:plain

前回の続きです。
その①とは、違う方法で書きました。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class MyHi {
static final String REGEX_NUMBER = "^[H,h,L,l]$";
public static void main(String[] args) {
	//ユーザの入力を取得する為のバッファリーダーを構築する
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	int times = 0;  //試行回数を記憶するための領域

	Random rnd = new Random();    //乱数作成クラス
	int left = rnd.nextInt(13)+1;

	while(true){

	//あとで数値を作るとイカ様っぽいので先に数値を作る
		int right = rnd.nextInt(13)+1;

		System.out.println("今回の数値:"+left);
		System.out.println("");
		String ind = "";
		System.out.println("High or Low? H:High,L:Low");

		try {
			//コンソールからユーザーの入力を受け取る
			ind = br.readLine();
		} catch(IOException e){
			System.out.println("エラーが発生しました");
			return; //例外が発生した場合、処理を終了する
		}
			if(!ind.matches(REGEX_NUMBER)){   //HまたLに等しくないとき
			System.out.println("Please, Hit, H  or  L");
			continue;   //入力喚起を促し、処理の先頭に戻る
		}

		/* 結果の判定を先に行う*/
		boolean bAnswer = false;
		boolean bHigh = true;  //HorLフラグ(trueがHigh, falseがLowとする)
		boolean bLow = false;
		//Highが指定された場合
		if((ind.charAt(0) == 'H') || (ind.charAt(0) == 'h')){
			bHigh = true;
			if( left<= right){   //右辺が左辺以上の場合
				bAnswer = true;  //正解とする
			}
		}
		//lowが指定された場合
		if((ind.charAt(0) == 'L') || (ind.charAt(0) == 'l')){
			bLow = true;
			if( left>= right){
				bAnswer = true;
			}
		}
		if( left == right){
			if(bHigh){
				System.out.println("結果:"+ left + "<=" + right);
			} else {
				System.out.println("結果:"+ left + ">=" + right);
			}
		} else if(left<right){
			System.out.println("結果:"+ left + "<=" + right);
		} else {
			System.out.println("結果:"+ left + ">=" + right);
		}
		if(bAnswer){
			times++;
			System.out.println(times + "回目、正解");
		}else {
			System.out.println("不正解 正解した回数は" + times + "回でした");
			break;
		}
		left = right;
		System.out.println("******************************************");
		}
	}
}


今回初めて知ったこと

static final String REGEX_NUMBER = "^[H,h,L,l]$";

finalを使って、変数(REGEX_NUMBER)を宣言することで、
一度だけしか値を代入できなくなる。

正規表現を使い、「H,h,L,I」のどれかにマッチしたら
それぞれの処理に移る。



表示画面

今回の数値:1

High or Low? H:High,L:Low
h
結果:1<=6
1回目、正解
******************************************
今回の数値:6

High or Low? H:High,L:Low
h
結果:6>=3
不正解 正解した回数は1回でした

個人的には、その①の方が分かりやすかったです。
(表示画面の見た目的に…)