数当てゲーム(適当な数を入力し、その桁と数字を予測していくゲーム)
これはn桁の数を探すゲームです。適当な数を入れると桁も数字もあっていれば「Hit」としその個数が、数字はあっているが桁が異なっていれば「Blow」としてその個数が出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。
練習問題 - プログラミングスレまとめ in VIP
//答え import java.util.*; class HitBlow { //正解の数をランダムで作成する private static char[] getSeikai() { Random rnd = new Random(); char[] seikai_char = new char[7]; boolean zoro_flag = true; //作成された数字の中にぞろ目があればtrue while (zoro_flag) { zoro_flag = false; String seikai = Integer.toString(rnd.nextInt(10000)); //System.out.println(seikai); seikai_char = seikai.toCharArray(); for (int i=0; i < seikai_char.length; i++) { for (int j=i+1; j < seikai_char.length; j++) { if (seikai_char[i] == seikai_char[j]) zoro_flag = true; } } } return seikai_char; } public static void main(String[] args) { char[] seikai_char = getSeikai(); while(true) { System.out.println("ぞろ目がない数を入力して下さい。"); Scanner scan = new Scanner(System.in); String input = scan.next(); char[] input_char = input.toCharArray(); // hitを探す //正解とインプットの短い方の長さまででhitを探す int search_length = input_char.length; if (search_length > seikai_char.length) search_length = seikai_char.length; for (int i = 0; i < search_length; i++) { if (input_char[i] == seikai_char[i]) { input_char[i] = 'h'; } } // hit以外からblowを探す for (int i = 0; i < input_char.length; i++) { if (input_char[i] != 'h') { for (int j = 0; j < seikai_char.length; j++) { if (input_char[i] == seikai_char[j]) { input_char[i] = 'b'; } } } } int hit_count = 0; int blow_count = 0; for (char c : input_char) { if (c == 'h') hit_count++; if (c == 'b') blow_count++; } System.out.println("hit: " + hit_count); System.out.println("blow: " + blow_count); if (hit_count == seikai_char.length) { System.out.println("正解です!"); break; } } } }
これは面白かったです。数当て難しいですね。おかげで動作確認に時間がかかりました。