■実装の概要
ループ処理と乱数を使用して、任意の年齢をコンソール上に出力し、ユーザに実年齢より高いか、低いか、同じかを入力してもらう。
ユーザの入力値に応じて、コンソール上に出力する年齢の範囲を狭めていき、最終的に実年齢と同じになるまで処理を繰り返す。
■制約事項・前提条件
- 推測する年齢は、0才〜122才までとする。
- 自分の年齢が表示した年齢より低い場合は、「0」を入力する。
- 自分の年齢が表示した年齢と同じ場合は、「1」を入力する。
- 自分の年齢が表示した年齢より高い場合は、「2」を入力する。
- 「0〜2」以外を入力した場合は、警告を表示し、処理を繰り返す。
- ユーザの誤入力(*)は、例外処理のみ実装する。
(*)誤入力:「0〜2」について入力を誤ったもの。
例:自分の年齢が表示した年齢より低いにも関わらず、「2」を入力した場合など。
■実装イメージ
以下に30才を想定した年齢推測ツールの実装イメージを示す。
・0〜122才の配列から任意の値を出力
58才は30才よりも高いので「2」を入力する。
・配列をリサイズし、0〜57才の配列から任意の値を出力
15才は30才よりも低いので「0」を入力する。
・配列をリサイズし、16〜57才の配列から任意の値を出力
30才は正解なので「1」を入力し、処理を終了する。
■サンプルコード
package main;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class GuessAgeMain {
// 初期最高齢を設定
private static final int MAX_AGE = 122;
// メイン処理
public static void main(String[] args) {
// 初期値セット
int chk_age_index = 0;
int chk_num = 0;
// 年齢配列の初期をセット
int[] age_array = new int[MAX_AGE + 1];
for(int i = 0; i < MAX_AGE + 1; i++ ) {
age_array[i] = i;
}
// フラグの初期値セット
boolean is_guess_age = false;
// ランダムとスキャナーのインスタンス
Random rand = new Random();
Scanner scan = new Scanner(System.in);
try {
// 年齢正解するまで繰り返し
while(!is_guess_age) {
// ランダムなインデックス番号を取得...(1)
chk_age_index = rand.nextInt(age_array.length);
// 年齢を出力し、ユーザに年齢が合っているか入力してもらう
System.out.print("あなたの年齢は「" + age_array[chk_age_index] + "」才ですか?:");
chk_num = scan.nextInt();
// 入力値判定
switch(chk_num) {
// 0:年齢が低い場合
case 0:
// 配列を編成しなおす「インデックス:(1)から最大未満」
age_array = Arrays.copyOfRange(age_array, chk_age_index + 1, age_array.length);
break;
// 1:正解の場合
case 1:
System.out.println("あなたの年齢は「" + age_array[chk_age_index] + "」才です");
// フラグ変更してループを抜ける
is_guess_age = true;
break;
// 年齢が高い場合
case 2:
// 配列を編成しなおす「インデックス:0から(1)未満まで」
age_array = Arrays.copyOfRange(age_array, 0, chk_age_index);
break;
// 0から2以外を入力した場合
default:
System.out.println("0〜2を入力してください");
break;
}
}
// 例外処理
}catch(Exception e) {
System.out.println("例外エラー:" + e);
// 終了処理
}finally {
// スキャナーをクローズ
scan.close();
}
}
}
■実行結果
実年齢を30才として実行した場合のコンソール出力例を以下に示す。
あなたの年齢は「120」才ですか?:2
あなたの年齢は「85」才ですか?:2
あなたの年齢は「58」才ですか?:2
あなたの年齢は「15」才ですか?:0
あなたの年齢は「27」才ですか?:0
あなたの年齢は「31」才ですか?:2
あなたの年齢は「30」才ですか?:1
あなたの年齢は「30」才です
コメント