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

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

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

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

Q&A

解決済

2回答

2329閲覧

Javaで1~100の間の数を当てるターゲットゲームの繰り返しで分からないことがあります

Aurora

総合スコア2

Java

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

0グッド

0クリップ

投稿2020/11/13 12:06

編集2020/11/13 12:24

ランダムな1~100の数字の中から、プレイヤーが指定した値とそこから+-の範囲を選択して範囲を絞っていき、
最終的にピンポイントでランダムな数字を当てるゲームを作っています。
ゲーム自体はほぼ出来たのですが、プレイヤーが続けるを選択した時に、もう一度ランダムな値を生成し直して最初からゲームを繰り返す方法がわかりません。
特にMath.randomを繰り返し処理の中に入れるとゲームの最中に値が変わってしまうなど、困っております。
どなたか先輩エンジニアの方、教えて頂けると助かります。

import lib.Input; public class Rader2 { public static void main(String[] args) { System.out.println("ターゲットとして1~100のうちの1つの数が設定されています。"); System.out.println("探索する位置と範囲を入力してターゲットを見つけてください。"); System.out.println("ターゲットと探索位置の差が探索範囲内であればヒットです。"); System.out.println("探索範囲より大きければはずれです"); System.out.println("探索位置とターゲットが一致すれば終了です"); system.out.println("") System.out.println("ゲーム開始"); System.out.println("ターゲットが設定されました"); int position = 0; //1~100の間で指定した値を入れる変数 int range = 0; //指定した値から+-の値を入れる変数 int number = 0; //指定と範囲を何回繰り返したかカウントする変数 int choice = 0; //もう一度ゲームをやるか決める変数 int target = (1 + (int)(Math.random() * 100)); //1~100の間でランダムで数字を決める do { position = Input.getInt("位置を入力してください"); //1~100の中で指定する値を代入 range = Input.getInt("範囲を入力してください"); //指定した値から+-いくつの値まで調べるか代入 if((target >= position - range) && (target <= position + range)) { //範囲の中にランダムな値があるか判定 System.out.println("ヒットしました"); number++; //繰り返すごとに回数をカウント }else { System.out.println("はずれです"); number++; } }while(target != position); //ランダムな値と指定した値が一緒ならwhileを抜ける System.out.println("おめでとうございます!" + number + "回目で成功です"); choice = Input.getInt("もう一度やりますか?(はい=1 : いいえ=2)"); //もう一度やるか選択 if(choice == 1) { System.out.println("ターゲットが設定されました");              //ここでランダムな値を入れなおしてゲームを繰り返したい } } }

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

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

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

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

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

cwi

2020/11/13 13:12

意図した動作をしないコードを示すべきです。また、変数が意図したとおりの変化をしているか調べた結果も添えてください。choiceが1になったらゲームを初期化するようですが、初期化作業にはchoiceに1以外の値を設定する操作が含まれているべきでしょう。その辺りはどうなっていますか?
2ckD

2020/11/13 13:55

回答ってほどじゃないですけど、 関数の宣言の仕方、再帰処理の仕方は初歩の初歩ですのでそれ覚えてください。
guest

回答2

0

一回のゲームのコードを、別の関数にまとめてしまいます
#今のmain関数をそのまま名前付け替えればいい?

そして、main関数では、ループを作って、その中でその関数を呼び出すようにします
こうすれば、ゲームを繰り返しできるようになります

ここまでできれば、あとは終了させるコードを追加すればいいだけとなります

投稿2020/11/13 15:02

y_waiwai

総合スコア87784

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

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

0

ベストアンサー

考え方を変えてみてはいかがでしょう?

ループの中に、設定値を決める処理から、正解になった後の、もう一度やるかを確認する処理までを作成し、終わる場合にのみ終了する、という構造にします。

要は、ご提示いただいたソースの、入力処理のdo~whileと同じ方法です。

投稿2020/11/13 14:22

YT0014

総合スコア1708

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

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

Aurora

2020/11/15 03:25

ありがとうございます。 おかげで解決出来ました。
YT0014

2020/11/15 03:30

解決おめでとうございます。 今後のことを考えると、y_waiwaiさんのご回答にあるように、1回のゲーム、という明確な単位がある場合、その単位での関数を作成するのと、効率の良いコードになるかと思いますので、ご考慮下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問