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

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

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

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

Q&A

5回答

4286閲覧

javaで数当てゲームを作りたいです。

s218AF19y

総合スコア12

Java

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

0グッド

0クリップ

投稿2019/07/22 04:26

javaで数当てゲームを作りたいです。

public class Main {
public static void main(String[] args){
System.out.println("数当てゲーム");
System.out.println("1-スタート 2-ルール 3-ゲームを終わる");

int menu = new java.util.Scanner(System.in).nextInt(); switch (menu) { case 1: System.out.println("ゲームをスタートします。"); int ans = new java.util.Random().nextInt(99); /* 数値を入力させる*/ int inputans = new java.util.Scanner(System.in).nextInt(); /*大小関係を調べる*/ if( ans > inputans ){ System.out.println("でかすぎ"); }else if( ans < inputans ){ System.out.println("小さすぎすぎ"); }else{ System.out.println("ぴったり"); } break; case 2: System.out.println("\nルール説明"); System.out.println("コンピューターが1~99の数字をランダムで決めるのでそれを当ててください。\n送信した数字が設定された数字より大きい場合は「でかすぎ」\n小さい場合は「小さすぎ」と表示されます。"); break; case 3: System.out.println("ゲームを終了します。"); System.exit(0); break; } }

}

ここまではできたのですがcase1で入力させた文字が間違いだった場合にもう一度case1を繰り返す処理をしたいです。

また、case2のルール説明が終わった後に最初のメニューに戻す処理を行いたいのですがどうすればよいかわかりません。ご教授していただけると嬉しいです。

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

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

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

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

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

m.ts10806

2019/07/22 05:12

質問は編集できますので適宜ご対応ください。 ※特にコードはマークダウン対応されていないとページ離脱率が一気に上がります
tetutetu

2019/07/22 06:12

回答については有識者の方々がすでにされているので、一点だけ。 ans と inputansの比較演算子、逆じゃないでしょうか。
guest

回答5

0

・case1のナカミをループさせればいいです
・最初のメニューからのコードをループさせればいいですね

投稿2019/07/22 04:30

y_waiwai

総合スコア87749

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

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

s218AF19y

2019/07/22 04:54

こんにちは、初心者ですので分からない箇所を質問させていただきます。case1の中にループのコードを書き込むと良いとのことですがループのコードは何を使えばいいですか?また、case内のどのタイミングでループコードを書き込めば良いですか?
y_waiwai

2019/07/22 04:59

while文でいいんじゃないでしょうか。 考え方は逆にして、入力した文字が正しければループを抜けるようにする、でいいでしょう
guest

0

全体の構造を書いてみました。

java

1package teratail; 2 3import java.util.InputMismatchException; 4import java.util.Scanner; 5 6public class Kadai1203 { 7 public static void main(String[] args) { 8 Scanner sc = new java.util.Scanner(System.in); 9 10 System.out.println("数当てゲーム"); 11 boolean is_cont = true; 12 while (is_cont) { 13 System.out.println("1-スタート 2-ルール 3-ゲームを終わる"); 14 is_cont = do_action(input_int(sc), sc); 15 } 16 System.out.println("ゲームを終了します。"); 17 } 18 19 static int input_int(Scanner sc) { 20 while (true) { 21 try { 22 return sc.nextInt(); 23 } catch (InputMismatchException e) { 24 System.out.println("整数を入力してください。"); 25 } finally { 26 sc.nextLine(); 27 } 28 } 29 } 30 31 static boolean do_action(int menu, Scanner sc) { 32 switch (menu) { 33 case 3: 34 return false; 35 case 1: 36 play(sc); 37 return true; 38 default: 39 show_help(); 40 return true; 41 } 42 } 43 44 static void show_help() { 45 System.out.println("\nルール説明"); 46 System.out.println("コンピューターが1~99の数字をランダムで決めるのでそれを当ててください。\n送信した数字が設定された数字より大きい場合は「でかすぎ」\n小さい場合は「小さすぎ」と表示されます。"); 47 } 48 49 static void play(Scanner sc) { 50 // TODO; 51 } 52} 53

play() の中身は、数当てゲームの処理を埋めていってください。
その前に、 1, 2 3, a, 1 2 など いろいろな入力をしてみて、メニュー処理ループが
思ったような挙動をするかを確認してください。

投稿2019/07/22 14:17

katoy

総合スコア22324

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

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

s218AF19y

2019/07/22 16:17

回答ありがとうございます。 katoyさんのコードは初心者の私には少し難しいのかもしれません。 caseの中にfor文やwhileを使ったコードを使うことはできますか? お手数ですが回答お願いします。
katoy

2019/07/23 12:58

> ... caseの中にfor文やwhileを使ったコードを使うことはできますか?... はい、できます。 でも case の中でいろいろかくより、メソッドに分離して、case の中は短くして、case 全体もパットみてわかる単純なものにしたほうが良いです。
guest

0

まずは「指定の数字が入力されたら終了」というのを組んでみると良いです。

これは考え方次第ですが、視点を変えると**「指定の数字が入力されるまで繰り返し」**とも言えます。
このようにロジックを組み立てる際には「上から順番に処理を並べる」のではなく
「プログラム的に視点を変えて考える」ことが必要となります。

投稿2019/07/22 05:11

m.ts10806

総合スコア80850

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

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

0

こんにちは、初心者ですので分からない箇所を質問させていただきます。case1の中にループのコードを書き込むと良いとのことですがループのコードは何を使えばいいですか?また、case内のどのタイミングでループコードを書き込めば良いですか?

投稿2019/07/22 04:53

s218AF19y

総合スコア12

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

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

m.ts10806

2019/07/22 05:18

回答に返信すべきところを誤って回答にしてしまった という理由でもつけて回答の削除依頼を出しておいてください。
guest

0

既に回答ついてますが

case1で入力させた文字が間違いだった場合にもう一度case1を繰り返す処理をしたいです

case1の中身を繰り返したいなら、 case1の中でループ処理 をかけばいいですよね

case2のルール説明が終わった後に最初のメニューに戻す処理

最初に戻りたいなら、最初からループ させればいいですよね

投稿2019/07/22 04:47

azuapricot

総合スコア2341

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

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

s218AF19y

2019/07/22 04:53

こんにちは、初心者ですので分からない箇所を質問させていただきます。case1の中にループのコードを書き込むと良いとのことですがループのコードは何を使えばいいですか?また、case内のどのタイミングでループコードを書き込めば良いですか?
azuapricot

2019/07/22 04:59

いきなりコードで書き起こすのは初心者なら難しいでしょう。 そういうときは、まずはノートにでも流れを書いてみましょう 例えばですがcase1の中身をこんな感じにしたいなーとか 1.ゲーム開始の文章を表示 2.数値を入力させる 3.判定 4.結果の表示 上記の例で、繰り返したいところを自分で決めましょう。 開始の文言は繰り返しの中にいれるのか、とかいつ繰り返しを抜けるのか、は自分で決めます。 ループのコードは大抵は for文やwhile文を使うことになるでしょう。 無限ループがしたいならwhile文を使うことが多いイメージですが人それぞれです。 無限ループなのか、回数を決めてその回数分だけループさせるのか、これもあなたが決めてコーディングしていきます。
s218AF19y

2019/07/22 09:10

すいません、初心者なもので質問させていただきます。 caseの中にwhileやfor文を入れるとループすることは理解できたのですが、 whileやfor文はどのような形で入力してあげればい良いですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問