• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaプログラミングについて)

javaプログラミングについて - hit&blowの判定がされない問題

このQ&Aのポイント
  • javaプログラム勉強中で作成しているhit&blowの判定がされない問題について質問します。
  • 数字が4桁で作っているのですが、数字や4桁以上を入力してしまった場合の表示は後にしようとして、先にhitとblowの判定を作ろうとしています。
  • しかし、実行するとhitとblowの判定がされず、正しく表示されません。解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> int[] Number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; > int x = 10; > for (int i = 0; i < 4; i++) { > int select = (int) (Math.random() * x); > answer[i] = Number[select]; > Number[select] = Number[x - 1]; > x--; > } ↑これは これで非常に正しいですが、この「Number」のように配列の要素を1つ抹消する場合は通常は「ArrayList」を使ったりします(「ArrayList」については下記ページ参照)。 クラス ArrayList<E> https://docs.oracle.com/javase/jp/6/api/java/util/ArrayList.html (1).(「hit」は容易に推測できますが)説明が非常に抽象的なので「blow」の処理が分かりにくいです。 (2).デバッグ用の「print」を各所に入れてチャント動いているか、チェックするようにしましょう(下記はデバッグ用の「print」を1つだけ残してあります)。 public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random rand = new Random(); int[] answer = new int[4]; int[] input = new int[4]; int[] Number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; int x = 10; for (int i = 0; i < 4; i++) { int select = (int) (Math.random() * x); answer[i] = Number[select]; Number[select] = Number[x - 1]; System.out.println( // デバッグ用 "i="+i+"; "+ "x="+x+"; "+ "select="+select+"; "+ "answer[i]="+answer[i]+"; "+ "Number[select]="+Number[select]+"; "+ ""); x--; } int count = 1; while (true) { System.out.println("4桁の異なる数値を入力"); String str_input = scan.next(); char[] char_input = str_input.toCharArray(); // 代入 for (int i = 0; i < 4; i++) { input[i] = Integer.parseInt(String.valueOf(char_input[i])); } // hit int hit = 0; for (int i = 0; i < 4; i++) { if (input[i] == answer[i]) { hit++; } } // blow int blow = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (i != j && input[i] == answer[j]) { blow++; } } } if (hit == 4) { System.out.println("4hit"); System.out.println("正解まで " + count + "回"); break; } else { // 「blow」を計算する上記のループでわざわざ // 「if (i != j && input[i] == answer[j])」として // 「hit」を排除しているのですから「(blow - hit)」のように // 「blow」から「hit」を引く必要はないのでは? System.out.println("Hit:" + hit + " Blow:" + blow); count++; } } }

その他の回答 (2)

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.2

> if (i != j && input[i] == answer[j]) { input[i]はキー入力した4桁。anserは計算した1桁ですのでこの条件には当てはまらない。

  • y_shimizu
  • ベストアンサー率41% (27/65)
回答No.1

hit&blowとやらは知りませんが、Scanner.nextIntでどんな値を入力しているのかによるのでなんとも 入力値をinputの配列全部に同じ値入れてるので、そこかな?

関連するQ&A