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

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

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

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

Q&A

解決済

3回答

499閲覧

クイズゲームの改善について

goc0_c

総合スコア8

Java

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

0グッド

0クリップ

投稿2018/08/08 01:48

編集2018/08/08 02:31

初心者ながらクイズゲームを作ってみました。

public class Quiz { public static void main(String[] args) { System.out.println("「上上下下左右左右BA」でお馴染みの名前は○○コマンド?"); System.out.println("1:コナミ 2: ナムコ 3: セガ"); System.out.print("正解の番号を入力してください>"); int ans = new java.util.Scanner(System.in).nextInt(); if (ans == 1) { System.out.println("正解です!"); System.out.println("1986年に発売された「グラディウス」が元ネタです。"); } else if (ans == 2) { System.out.println("不正解です…"); } else if (ans == 3) { System.out.println("不正解です…"); } else { System.out.println("1~3の番号を入力してください。"); } } }

しかし、これでは13以外を入力するとプログラムが終わってしまいます。
1
3以外を入力した場合、また数字を入力する場面に戻りたいのが理想です。
while文を使ってもうまくいきませんでした。
どのように変更すれば理想になるでしょうか。
よろしくお願いします。

追記

public class Quiz { public static void main(String[] args) { System.out.println("「上上下下左右左右BA」でお馴染みの名前は○○コマンド?"); System.out.println("1:コナミ 2: ナムコ 3: セガ"); System.out.print("正解の番号を入力してください>"); int ans = new java.util.Scanner(System.in).nextInt(); while (ans != 1 || ans != 2 || ans !=3 ) { System.out.print("正解の番号を入力してください>"); int ans = new java.util.Scanner(System.in).nextInt(); } if (ans == 1) { System.out.println("正解です!"); System.out.println("1986年に発売されたFCソフト「グラディウス」が元祖ネタです。"); } else if (ans == 2) { System.out.println("不正解です…"); } else if (ans == 3) { System.out.println("不正解です…"); } else { System.out.println("1~3の番号を入力してください。"); } } }

返信が遅れて申し訳ありません。
自分でwhile文を使ったのはこれです。
何人かの方に正解らしきコードを教えてもらったのですが、
内容を理解できないので、勉強不足ということでもう一度、
勉強しなおします。

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

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

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

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

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

torisan

2018/08/08 01:56 編集

>while文を使ってもうまくいきませんでした。  while文で出来ると思うのですが、どのように記述したのでしょうか。
m.ts10806

2018/08/08 01:55

while文を使ったコードを提示してください。想定通り動いていないもので構いません。何がどううまくいかなかったのかが分かるのはその失敗したコードです。
milkteas

2018/08/08 01:56

簡単な~ってタイトルはちょっと印象悪いかも。簡単なら自己解決すればって思ってしまいます。
fuzzball

2018/08/08 02:05

質問内容が「簡単」ではなく、シンプルなクイズゲーム的な「簡単」だと思いますが‥。(もしかするとクイズの問題が「簡単」なのかも‥)
goc0_c

2018/08/08 02:24

丸投げの質問はよくなかったみたいですね。すいませんでした。
m.ts10806

2018/08/08 02:30

質問は編集できるので適宜対応してください
guest

回答3

0

java

1while (ans != 1 || ans != 2 || ans !=3 )

この書き方では、ループする条件が「1でない」「2でない」「3でない」のいずれかが成立することですが、これは常に成立してしまい、無限ループに陥ります。
正しくは、「1,2,3のいずれでもない」ときにループしてほしいので、こうなります。

java

1while (ans != 1 && ans != 2 && ans !=3 )

投稿2018/08/08 04:21

swordone

総合スコア20649

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

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

0

java

1System.out.print("正解の番号を入力してください>"); 2 3Integer[] range = {1, 2, 3}; 4 5while(true){ 6 int ans = new java.util.Scanner(System.in).nextInt(); 7 if(!Arrays.asList(range).contains(ans)){ 8 System.out.println("1~3の番号を入力してください。"); 9 continue; 10 } 11 // 正解・不正解判定(省略) 12 break; 13}

↑これでよかろうよ。

投稿2018/08/08 01:59

tkturbo

総合スコア5572

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

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

0

ベストアンサー

int ans = new java.util.Scanner(System.in).nextInt();
の部分が入力された文字を読み取る箇所です。
elseでメッセージ表示された後に続く処理がないので終わります。
whileなどでループさせて文字読み取り処理部分に戻ればいけるはずです。

追記:
記載されている内容だとループの囲いがその部分だけなので結局1~3以外の場合に終わってしまいます。
ループ処理で全体を囲ってあげて、正解の場合には抜ける処理にしてあげるようにする等しましょう。
書き方は色々あると思いますが、提示されたコードを元に修正すると下記な感じです。

Java

1 public static void main(String[] args) { 2 System.out.println("「上上下下左右左右BA」でお馴染みの名前は○○コマンド?"); 3 System.out.println("1:コナミ 2: ナムコ 3: セガ"); 4 System.out.print("正解の番号を入力してください>"); 5 6 // ループ条件が常に真 7 while (true) { 8 int ans = new java.util.Scanner(System.in).nextInt(); 9 10 if (ans == 1) { 11 System.out.println("正解です!"); 12 System.out.println("1986年に発売されたFCソフト「グラディウス」が元祖ネタです。"); 13 break; 14 } else if (ans == 2 || ans == 3) { 15 System.out.println("不正解です…"); 16 break; 17 } else { 18 // メッセージを表示して再ループ 19 System.out.println("1~3の番号を入力してください。"); 20 } 21 } 22 }

投稿2018/08/08 01:58

編集2018/08/08 03:06
milkteas

総合スコア79

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

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

goc0_c

2018/08/08 03:45

ありがとうございました。 無事に実行でき、かつ自分の知識で理解できました。
milkteas

2018/08/08 03:48

良かったです。 ちなみに、今の記載だと入力されたものをintに変換しようとするので 数値以外の文字列だった場合に変換時にエラーとなります。 int ans = new java.util.Scanner(System.in).nextInt(); 取得時に文字列で扱って、 String input = new java.util.Scanner(System.in).next(); if(input.equals("1")) で判定すれば数値以外が入ってきた場合も エラーにならないようになります。ご参考まで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問