【初心者】【JavaでHigh&Lowゲームをつくってみた】~その②~
前回の続きです。
その①とは、違う方法で書きました。
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回でした
個人的には、その①の方が分かりやすかったです。
(表示画面の見た目的に…)