コンソール版のじゃんけんゲームを作成しました。
しかし、とりあえず動く状況なので。。。
これに、細かい部分を作ってしまおうと思います。
まずは、バグ退治です。。。がしかしその前に処理の概要をいかに記載します。
- プログラムを起動する(Mainクラスのメインメソッド)
- コマンドで「exe」を入力してエンターキー押下
- じゃんけんゲームの起動(FirstCls#execute())
- じゃんけんゲームの入力を待つ
- 「1〜3」の入力かチェック
- 乱数を生成し CPUの手とする
- 両者の勝敗判定を行う
そして、修正した結果(差分)はこちらのリンクで確認できます。
バグのないようですが、じゃんけんゲームの入力時に「1〜3以外の値」が入力された時にMapから値が取得できず。。。
playerの手がnull
になります。そして、処理は次へ行ってしまうので、「???」となります。
具体的なコードは下の部分です。
メインメソッドは下の部分で、FirstCls#handleInput()を呼び出しています。
【Mainクラス】
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String input = scan.next();
FirstCls first = new FirstCls();
if ("exe".equals(input)) {
first.execute(scan);
}
boolean isNumber = first.isNumberString(input);
if (isNumber) {
System.out.println(input + "は数字です。");
} else {
System.out.println(input + "は数字ではありません。");
}
}
}
FirstCls#execute()でじゃんけんゲームが開始されます。
public void handleInput(String input) {
System.out.println("入力値: " + input);
if (isNumberString(input)) {
System.out.println(input + "は、数字です");
} else {
System.out.println(input + "は、数字ではありません");
}
}
クラス名がリンクになっていますが、これはGithubへのリンクになります。
修正する(修正内容)
修正方法としては、チェック処理を入れてやります。
そして「クラスの使い方」という観点から、チェッククラスを作成します。
余計な音が履いていますが、これを作成した時の動画です。
ここで追加した実装はCheckUtilクラスです。
このクラスは、実装の過程で、メソッドが増えていきましたが、まぁそんなもんでしょう。
ちなみに、このクラスのメソッドは、全て「静的メソッド」と呼ばれるメソッドです。
呼び出す時にクラス名.メソッド名
という形で、呼び出します。
チェック処理
このチェック処理のポイントはズバリ「正規表現」です。
使用している以下の正規表現は0〜9の文字にマッチするのであればTRUEを変えす(そうでなければFALSEを返す)メソッドを使用しています。
そして、同じ名前のメソッドがあります。並べてみると違いが一目瞭然です。
public static boolean isNumber(String numberStr) {};
public static boolean isNumber(String numberStr, String range) {};
そして、Stringクラスにあるメソッドを使用しています。この引数に渡す文字列が「正規表現」であり、このメソッドの返り値が判定結果になります。
numberStr.matches(range)
オーバーロード
上のような実装のことを「メソッドのオーバーロード」と言います。親クラスのメソッドを上書きする「オーバーライド」とこんがらないように気をつけてください。
処理の内容に関してですが
・引数が1つのメソッドは単純に「数字の入力かチェック」
・引数が2つのメソッドは、数字の範囲を指定してチェック」
というように、処理の内容が若干違います。
初めに「0-9の入力(数値入力)チェック」を作成したのですが、じゃんけんで使用するのは1〜3までだけではないか。。。と気がついたので、数字入力チェックに「範囲」を追加しました。
public class CheckUtil {
/** 0-9(数字)判定をする時の正規表現 */
public static final String REGREX = "[0-9]";
/** 1-3までの判定に使用する正規表現 */
public static final String REG_1_TO_3 = "[1-3]";
/**
* 必須入力チェック、第二引数にあう正規表現でのチェックを行う
*
* @param numberStr 検証する文字列
* @param range 判定用の正規表現
* @return true: 正規表現にマッチ false: マッチしない
*/
public static boolean isNumber(String numberStr, String range) {
// 正規表現で判定します。数字のrangeに当てはまる時にtrue
if (isEmpty(numberStr) && numberStr.length() != 1) {
return false;
}
if (numberStr.matches(range)) {
return true;
}
return false; }
/**
* 引数の1文字が数字かどうかの判定をする。。
*
* @param numberStr
* @return true: 引数が0-9 false: 0-9ではない
*/
public static boolean isNumber(String numberStr) {
// 正規表現で判定します。数字の0-9に当てはまる時にtrue
if (isEmpty(numberStr) && numberStr.length() != 1) {
return false;
}
if (numberStr.matches("[0-9]")) {
return true;
}
return false;
}
/**
* 引数に渡した文字列が、Null、またはから文字("")
* @param str 判定する文字列
* @return ture;
*/
public static boolean isEmpty(String str) {
if (str == null || "".equals(str)) {
return true;
}
return false;
}
}
ちなみに、静的メソッドは、static修飾子をつけて実装します。インスタンスを生成しないので、メモリの節約になりますが、作りすぎると余計な負担(メモリ使用)になるので注意です。
まとめ
今までに作成したクラスFirstClsでの処理を修正しました。
くどいようですが、Mainメソッドは修正していません。
そして、追加したCheckUtil
クラスはチェック担当のクラスです。
なので、このクラスにはチェック処理しか追加しません。
関連ページ一覧
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
Java Basic一覧
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
Git関連
- Java Git clone in Eclipse 〜サンプルの取得〜
- Eclipse Gitリポジトリの取得 〜GitからソースをPullしよう〜
- IntelliJ IDEA Git〜Gitリポジトリからクローン〜
JavaFX関連ページ
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
- JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
- Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜
ステップアップ関連ページ一覧
- Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
- ステップアッププログラミング〜Java FxでHelloWorld解説〜
- Java StepUpPrograming〜JavaFX で四則計算〜
- Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
- Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
- Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
- Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
- Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine