計算機プログラミングI

数当てゲームのプログラム


class NumberGuess {
  // 人間に0から100までの間の数を1つ思い浮かべてもらい、それを当てる
  public static void main(String args[ ]) {
    // 人間に大小を教えてもらうための番号を宣言しておく
    int GUESS_IS_CORRECT = 0;   // 正解
    int GUESS_IS_SMALLER = 1;   // 推定値の方が小さい
    int GUESS_IS_GREATER = 2;   // 推定値の方が大きい

    // 0から100までの間に答えがあるとする。
    int minimum = 0;            // 推定範囲の下限
    int maximum = 100;          // 推定範囲の上限

    java.io.BufferedReader console = // ターミナルから答えを受けるための準備
      new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

    System.out.println("0から100までの間の数を1つ思い浮かべて下さい。");
    // 最初に-1だと推定して「それより大きい」と言われたとしてかいし
    int guess = -1;             // 推定値
    int answer = GUESS_IS_SMALLER; // 答え

    // 推定が正しくない間くりかえす
    while (answer != GUESS_IS_CORRECT) {

      //推定範囲の改良
      if (answer == GUESS_IS_SMALLER)// guess < 正解 の場合
        minimum = guess + 1;    // 正解 は [guess+1..maximum] にある
      else if (answer == GUESS_IS_GREATER) // 正解 < gusess の場合
        maximum = guess - 1;    // 正解 は [minimun..guess-1] にある

      guess = (minimum + maximum) / 2; // 区間の中央値を次の推定値とする

      // 推定値の正しさを問い合わせる
      System.out.print("その数が"+ guess + "と比べて(" + GUESS_IS_CORRECT +
                       ")同じ、(" + GUESS_IS_SMALLER + ")より大きい、(" +
                       GUESS_IS_GREATER +")より小さいかを教えて下さい> ");

      try {// 端末から1行読み、それを整数値に変換する
        answer = Integer.parseInt(console.readLine());
      } catch (java.lang.Exception e) {
        // 正しくない入力の場合(何もしない)
      }
    }
  }
}


Hidehiko Masuhara, October 2000