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

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

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

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

Q&A

解決済

2回答

2052閲覧

javaプログラムで、ヒット&ブローを作っています!

ta.tatu

総合スコア12

Java

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

0グッド

1クリップ

投稿2019/10/28 23:51

編集2019/10/29 22:21

import

1import java.util.Random; 2import java.util.Scanner; 3 4 5public class hitandblow01 { 6 7 public static void main(String[] args)throws Exception { 8 Random random = new Random(); 9 var sc =new Scanner(System.in); 10 11 ArrayList<Integer>ans = new ArrayList<Integer>(); 12 13 ArrayList<Integer>num1 = new ArrayList<Integer>(); 14 for(int i = 0; i < 10; i++) { 15 num1.add(i); 16 } 17 for(int i = 0; i < 4; i++) { 18 int index = random.nextInt(num1.size()); 19 ans.add(num1.remove(index)); 20 } 21 System.out.println(ans); 22 int count = 1; 23 24 while(true) { 25 ArrayList<Integer>player = new ArrayList<Integer>(); 26 27 System.out.print("4桁の数字を入力して下さい。"); 28 29 int num2 = sc.nextInt(); 30 System.out.println(num2); 31 player.add((num2 / 1000)% 10); 32 player.add((num2 / 100)% 10); 33 player.add((num2 / 10)% 10); 34 player.add(num2 % 10); 35 36 int hit = 0; 37 for(int i =0; i < 4; i++) { 38 if(player.get(i)== ans.get(i)) { 39 hit++; 40 } 41 } 42 int blow = 0; 43 for(int i = 0; i < 4; i++) { 44 for(int j = 0; j < 4; j++) { 45 if(player.get(i)==ans.get(j)) { 46 blow++; 47 } 48 } 49 } 50 if(hit==4) { 51 System.out.println("おめでとう!"+count+"回目で成功♪"); 52 } 53 System.out.println("ヒット:"+hit+"個、ブロー:"+(blow - hit)+"個"); 54 System.out.println(); 55 count++; 56 } 57 } 58 59} 60 61 62 63コード

javaでヒット&ブローを作りました!
改良するために三回に一回使われている数字を出すにはどうすれば良いのか分からず困ってます。
どなたか教えてください!

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

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

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

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

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

m.ts10806

2019/10/29 00:17

何をもとに何を教えれば良いのでしょうか。 「作ってくれ」という作業依頼でしょうか
azuapricot

2019/10/29 00:21

教えて下さいって丸投げもいいところですしせめて自分で作ったコードは質問に提示しましょうね こんな質問上司や先生にしたら怒られるにきまってます。 質問をする前に一度読み直してから投稿しましょうね
m.ts10806

2019/10/29 00:26

せめて「質問するときのヒント」を読んで質問テンプレートを使ってください。 質問は編集できますので。
jimbe

2019/10/29 03:45

> 三回に一回使われている数字を出す の仕様が分からないのですが, 具体的にどういうことでしょう.
m.ts10806

2019/10/29 22:13

マークダウンはヘルプなどを確認し正しく使ってください。平で提示されても読む気をなくすだけです。
dit.

2019/10/29 23:41

1行目(import java.util.ArrayList;)消えちゃってるんで、```の後は改行してください。
guest

回答2

0

ベストアンサーが付きましたので, 勉強中とのことで蛇足です.

※ 以下のコードは動作確認はしていません

java

1 int hit = 0; 2 for(int i =0; i < 4; i++) { 3 if(player.get(i)== ans.get(i)) { 4 hit++; 5 } 6 } 7 int blow = 0; 8 for(int i = 0; i < 4; i++) { 9 for(int j = 0; j < 4; j++) { 10 if(player.get(i)==ans.get(j)) { 11 blow++; 12 } 13 } 14 }

これでは hit 判定された数字が blow でもカウントされてしまうのではないでしょうか.
hit した数字は blow チェックをしないように

java

1 int hit = 0; 2 int blow = 0; 3 for(int i = 0; i < 4; i++) { 4 if(player.get(i) == ans.get(i)) { 5 hit++; 6 } else { 7 for(int j = 0; j < 4; j++) { 8 if(player.get(i) == ans.get(j)) { 9 blow++; 10 } 11 } 12 } 13 }

とされては如何でしょう.

また, この場合は List.contains というメソッドで j のループを置き換えられると思います.

java

1 int hit = 0; 2 int blow = 0; 3 for(int i = 0; i < 4; i++) { 4 if(player.get(i) == ans.get(i)) { 5 hit++; 6 } else if(ans.contains(player.get(i))) { 7 blow++; 8 } 9 }

さらについでに, "4" というのは ans の件数ですので,

java

1 int hit = 0; 2 int blow = 0; 3 for(int i = 0; i < ans.size(); i++) { 4 if(player.get(i) == ans.get(i)) { 5 hit++; 6 } else if(ans.contains(player.get(i))) { 7 blow++; 8 } 9 }

とすると, 4桁以外に変えたとしてもこの個所はこのまま使用できることになります.

投稿2019/10/30 05:31

jimbe

総合スコア12646

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

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

ta.tatu

2019/10/30 09:04

丁寧な補足ありがとうございます。 助かります!
guest

0

ベストアンサー

三回に一回使われている数字

何回か失敗していると、ヒントとして3番目の答えの数字を表示させるって考えでいいのかな?
後、このプログラムには終わりがないので、つけておきました。

Java

1if(hit==4) { 2 System.out.println("おめでとう!"+count+"回目で成功♪"); 3 break; 4}else{ 5 //追加 6 if(count == 5){ 7 System.out.println("5回間違えたのでヒントだよ。3番目の数字は、" + ans.get(2) + "だ"); 8 } 9} 10

投稿2019/10/30 00:54

編集2019/10/30 00:57
stdio

総合スコア3307

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

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

ta.tatu

2019/10/30 04:30

ありがとうございました。まだまだ勉強不足でした! 勉強始めてまだ3ヶ月なのでもっと勉強します!
stdio

2019/10/30 04:56

どれだけ勉強しているのか分かりませんが、頑張って下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問