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