質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

661閲覧

HitBlowのコードについてわからないです。

Aratamicky

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/07/17 02:27

編集2019/07/17 10:01

Java

1import java.util.Random; 2import java.util.Scanner; 3public class hitblow1 { 4 static Scanner sc=new Scanner(System.in); 5 static char[] secretNumber=new char[4]; 6 static int i; 7 static int hitCount=0; 8 static int blowCount=0; 9 static char [] inputNumber=new char[4]; 10 static int loopCount=0; 11 static int substitution=0; 12 public static void main(String[] args) { 13 14 System.out.println("シークレットナンバーをせっとしました"); 15 secretArraySet(); 16 debugSecret(); 17 do { 18 inputArraySet(); 19 hitCountJob(); 20 blowCountJob(); 21 hitblowMessage(); 22 23 repeatNumber(); 24 25 }while(hitCount!=4); 26 loopCount(); 27 28 System.out.println("4Hit"); 29 } 30 //何回繰り返される 31 public static void loopCount() { 32 loopCount=0; 33 while(true) { 34 if(hitCount!=4) { 35 loopCount++; 36 }else { 37 break; 38 } 39 } 40 System.out.println("正解まで"+loopCount+"回かかりました"); 41 42 } 43 44 //ここでsecretNumberを表現している 45 public static void debugSecret() { 46 47 for(i=0;i<secretNumber.length;i++) { 48 System.out.print(secretNumber[i]); 49 } 50 System.out.print("\n"); 51 } 52 public static void secretArraySet() { 53 Random rnd=new Random(); 54 char [] arrayNumber= {'1','2','3','4','5','6','7','8','9'}; 55 int location01,location02; 56 char tmp;//temporaly 一時的ファイル 57 58 //無作為に50回arrayNumberの値を入れ替えた 59 for(i=0;i<50;i++) { 60 location01 = rnd.nextInt(arrayNumber.length); 61 location02 = rnd.nextInt(arrayNumber.length); 62 tmp = arrayNumber[location01]; 63 arrayNumber[location01]=arrayNumber[location02]; 64 arrayNumber[location02] = tmp; 65 } 66 //arrayNumberの前4つをsecretNumberに代入 67 for(i=0;i<secretNumber.length;i++) { 68 secretNumber[i]=arrayNumber[i]; 69 } 70 } 71 //ここでinputををする 72 public static void inputArraySet() { 73 74 System.out.println("4桁の異なる数値を入力してください"); 75 String inputStr=sc.next(); 76 inputNumber=inputStr.toCharArray(); 77 debugInput(); 78 } 79 //ここでinputNumberを表現している 80 public static void debugInput() { 81 82 for(i=0;i<inputNumber.length;i++) { 83 System.out.print(inputNumber[i]); 84 } 85 System.out.print("\n"); 86 } 87 //hit 88 public static void hitCountJob() { 89 hitCount=0; 90 for(i=0;i<secretNumber.length;i++) { 91 if(secretNumber[i]==inputNumber[i]) { 92 hitCount++; 93 } 94 } 95 } 96 //hit&blowの表示 97 public static void hitblowMessage() { 98 99 System.out.print("Hit:"+hitCount+" blow:"+blowCount+"\n"); 100 } 101 //blow 102 public static void blowCountJob() { 103 blowCount=0; 104 105 for(int j=0;j<secretNumber.length;j++) { 106 for(i =0;i<inputNumber.length;i++) { 107 if(secretNumber[j]==inputNumber[i] && i!=j) { 108 blowCount++; 109 } 110 } 111 } 112 } 113 114 115 116 117 } 118 } 119} 120

正解までにかかった回数と同じ数値が入力された場合の処理がしたいのですが、このコードではできないのでわかる方教えてください。
実行すると正解までにかかった回数が0回になるのでそこを回数が出るようにするにはどうすればいいですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/07/17 02:55

提示のコードではどういうふうな動作になるんでしょうか
Aratamicky

2019/07/17 03:19

実行すると正解までにかかった回数が0回となります。
y_waiwai

2019/07/17 03:22

それを質問に追記してください
Aratamicky

2019/07/17 03:22

loopcountが動いてないので0回にはなるんだと思うんですけどどうすればいいですか?
y_waiwai

2019/07/17 03:31

それを質問に書きましょう。質問は編集できます。 わからないので教えろ、といわれても、なにがわからないのかわからんので教えようがないですが、 結果がこうなってしまうのはなぜか、そうならないようにするためにはどうすればいいのか、と具体的なことを書くと回答しやすいですよ
guest

回答2

0

ほぼ同じコードを別の質問で見たのですが、何かの課題でしょうか?

ならば私の指摘もほぼ同じです。

投稿2019/07/17 07:11

編集2019/07/17 07:12
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

うーん?
Javaで書く必要、ある?

すべてstaticで、すべてC言語でいう関数みたいな使い方しかしていない。

意味ない気がするが...
まあいいけど。

loopCountメソッドの方(変数も同じ名前のやつがあるから紛らわしい...)は、なんでwhileの外?

それじゃあ、一回しか動かないでしょ。

今回のは文を追っていったらわかるよ。
不自然な部分がいくつもある。

特に loopCountメソッド内のwhile文。
不自然すぎ。

何がしたいのか意味不明。

処理する(ループありで) -> ループから抜ける -> loopCountメソッドが呼び出される
-> (loopCountメソッド内) whileで無限ループ -> (無限ループ内で)hitCountフィールドが4でなければ...それ以外なら... -> 最初は 0 なので "それ以外"が選択される -> break -> printlnメソッドで出力...

意味不明。
ロジックは書いて考えたほうがいいよ?
普通に考えて、

High or low を入力させる -> 正しいかどうか調べる -> 間違っているならカウンタを上げて、再度入力させる...

みたいな感じじゃないの?

それともそういう仕様で書いているの?

なんか、でたらめに書いている感じが強すぎる...

また、フィールドはグローバル変数として使うものではないです。

C言語ですら非推奨です。

C言語の説明では 参考1, Javaでの説明は参考2です。

ほかにもありますが。

投稿2019/07/17 05:45

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問