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