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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

2138閲覧

数字を入力しないと次の処理に移行しない問題を解決したい

Eston

総合スコア67

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/11/10 17:13

編集2018/11/10 17:48

いつもお世話になっております。

開発環境
MacOS:Mojave バージョン10.14.1
Eclipse:Version: Photon Release (4.8.0)
言語:Java

現在、数当てゲームを作成しています。
自分なりの改良としては、

1) ユーザーが回答したあと、ヒントがほしい場合は”y”、いらない場合は”n”を入力して、”y”の場合、入力された数より大きいか小さいかを教えてくれる

2) ユーザーが"q"を入力したら、ゲームを終了する

この2つを加えようとしています。

Java

1import java.util.Random; 2import java.util.Scanner; 3 4public class Lottery { 5 public static void main(String[] args) { 6 // TODO 自動生成されたメソッド・スタブ 7 Scanner kb = new Scanner(System.in); 8 9 Random random = new Random(); 10 11 int ans = random.nextInt(101); 12 int count = 0; 13 int userAns = 0; 14 15 System.out.println("0~100の数字を入力してください"); 16 17 18 String str = new java.util.Scanner(System.in).next(); 19 while(!str.equals("q")) { 20 //String str = new java.util.Scanner(System.in).next();s 21 System.out.printf("%d> ", count + 1); 22 int getNumberInput = kb.nextInt(); 23 userAns = getNumberInput; 24 25 System.out.printf("\t%d ..... ", userAns); 26 if (ans == userAns) { 27 System.out.println("YOU WIN!"); 28 System.out.println("You took " + count + "tries"); 29 break; 30 } else if (ans < userAns) { 31 32 System.out.println("違います!  ヒントがほしいですか?y|n"); 33 String yes = "y"; 34 String yn = kb.next(); 35 36 if (yes.equals(yn)) { 37 38 System.out.println("答えより大きいです"); 39 } else { 40 41 System.out.println("数字を入力してください"); 42 } 43 } else { 44 45 System.out.println("違います!  ヒントがほしいですか?y|n"); 46 String yes = "y"; 47 String yn = kb.next(); 48 if (yes.equals(yn)) { 49 50 System.out.println("答えより小さいです"); 51 } else { 52 53 System.out.println("数字を入力してください"); 54 } 55 } 56 count++; 57 str = new java.util.Scanner(System.in).next(); 58 } 59 if (ans != userAns) { 60 System.out.println("Game Over! The correct answer is " + ans + " actually!! "); 61 System.out.println("You took " + count + " tries"); 62 } 63 64 } 65} 66 67

出力結果イメージ説明

この赤い部分で囲まれたところは数字を入力しないと次の処理に移ってくれないのですが、どのような解決策がありますか?

おそらく、緑色の部分で囲まれたところが数字でも機能することから、y|nで答えるところと数字で答えるところがダブっているので、コンピューターに正しく命令できていないのだと予想して、解決に努めています。

同じような問題に直面した経験がある方、解決策をご存知の方、ぜひご教授をお願いいたします。

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

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

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

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

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

swordone

2018/11/10 17:23

数字入力なしで先に進んでどうするのですか?
Eston

2018/11/10 17:27

失礼しました。数字入力のあと(具体的には画像の「1>」や「2>」のあと)の処理が行われていないことが問題です。つまり、数字を2階入力しているわけです。
退会済みユーザー

退会済みユーザー

2018/11/10 17:28

コンピューターは困ってませんよ。あなたの書いたロジックのとおり直情的に進行しますよ
Eston

2018/11/10 17:30

はい、おそらくコンピューターへの命令の仕方が悪いのだと思います
guest

回答2

0

ベストアンサー

初めまして。
微力ながら協力させてください。

意図している回答と違っていたら申し訳ないです。

Java

1Scanner kb = new Scanner(System.in); 2 3 Random random = new Random(); 4 5 int ans = random.nextInt(101); 6 int count = 0; 7 int userAns = 0; 8 9 System.out.println("0~100の数字を入力してください"); 10 11 12 String str = new String(); 13 while(!str.equals("q")) { 14 System.out.printf("%d> ", count + 1); 15 int getNumberInput = kb.nextInt(); 16 userAns = getNumberInput; 17 18 System.out.printf("\t%d ..... ", userAns); 19 if (ans == userAns) { 20 System.out.println("YOU WIN!"); 21 System.out.println("You took " + count + "tries"); 22 break; 23 } else if (ans < userAns) { 24 25 System.out.println("違います!  ヒントがほしいですか?y|n"); 26 String yes = "y"; 27 String yn = kb.next(); 28 29 if (yes.equals(yn)) { 30 31 System.out.println("答えより大きいです"); 32 } else { 33 34 System.out.println("数字を入力してください"); 35 } 36 } else { 37 38 System.out.println("違います!  ヒントがほしいですか?y|n"); 39 String yes = "y"; 40 String yn = kb.next(); 41 if (yes.equals(yn)) { 42 43 System.out.println("答えより小さいです"); 44 } else { 45 46 System.out.println("数字を入力してください"); 47 } 48 } 49 count++; 50 } 51 if (ans != userAns) { 52 System.out.println("Game Over! The correct answer is " + ans + " actually!! "); 53 System.out.println("You took " + count + " tries"); 54 } 55``` 56 57入力はどうしても混乱しやすいですよね。 58入力を求める行が多すぎたために数値を入力しないと進まなかったようです。 59 60よかったら参考にしてください。 61 62一緒に勉強頑張りましょう!!

投稿2018/11/10 18:23

shaw

総合スコア209

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

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

Eston

2018/11/10 18:29

回答ありがとうございます。やはり「String str = new java.util.Scanner(System.in).next();」の部分が問題だったのですね。おっしゃる通り、入力の行の部分で混乱しておりました。スッキリまとめてくださり、大変勉強になりました。今後も「説明力」ともにスキルの向上を目指して頑張りたいと思います。
shaw

2018/11/10 18:40

説明するのって難しいですよね。 お力に慣れたようで僕も嬉しいです!!
guest

0

whileの前とwhileの最後にある、

java

1 String str = new java.util.Scanner(System.in).next();

が完全に無駄です。
というか、全体的に無駄が多いです。共通する部分はまとめ、別れるところだけ分けましょう。

投稿2018/11/10 18:33

swordone

総合スコア20649

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

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

Eston

2018/11/10 18:37

承知いたしました、アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問