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

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

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

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Q&A

解決済

2回答

2158閲覧

java じゃんけんゲーム whileループ

oas12

総合スコア1

Java

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

0グッド

0クリップ

投稿2023/05/04 16:50

編集2023/05/05 03:03

実現したいこと

ここに実現したいことを箇条書きで書いてください。
一回目のwhileの最後でboolean型の変数をfalseに変えて、2回目以降はfalseのままループするじゃんけんゲームを作りたい。

前提

ここに質問の内容を詳しく書いてください。
java独学一か月目の者です。
じゃんけんゲームで1回目のwhileで「最初はグー、じゃんけんほい」と表示し、最後でboolean型の変数isFirstをfalseに変えます。2回目以降はfalseのままでループし、「あいこでしょ」と表示させたいです。
一回目のwhileは勝ち負けならそこで終わり、あいこならisFirstをfalseに変えて、2回目に移動。
2回目のwhileはあいこならループし、勝ち負けなら終わりだと思い、コードを書いたのですが。根本的に間違っていますか。
プロの方なら、以下の問題をどう回答しますでしょうか。コードを教えて頂きたいです。
問題文↓

  1. 初期化

ランダムクラスの準備をする
キーボード入力の準備をする
文字列型の配列 names を用意してグーチョキバーを設定する
2. 開始メッセージ(「じゃんけん勝負 グーチョキパーを数字で入力してね…」)を表示する
3. boolean型の変数 isFirst を用意し、trueで初期化する
4.isFirst はwhileの最後でfalseになり、2回目以降はずっとfalseのまま

これにより、 isFirst で1回目とそれ以外の判定をすることができる

while(true)で無限ループを生成し、勝敗がついたらbreakで無限ループを抜ける

5.じゃんけんの掛け声を表示する
6.isFirst がtrue(1回目のループ)のときは「最初はぐー、じゃんっけんっ:」を表示する
7.isFirst がfalse(2回目以降のループ)のときは「あいこでっ」を表示する
8.自分(プレイヤー)の手を保持する変数 player を用意して入力した値を代入する
9.相手(コンピュータ)の手を保持する変数 com を用意して、値を乱数(0~2)に決める
10.「〇〇(COM)と〇〇(Player)で...」を表示する
11.player と com を比べて、その値で勝敗判定を行う
12.player と com が同じとき、「あいこだよ!」を表示する
13.Playerが負けたとき、「あなたの負け」を表示し、breakで無限ループを抜ける
14.Playerが勝ったとき、「あなたの勝ち」を表示し、breakで無限ループを抜ける
15.表示を改行する
16.isFirst をfalseにする(2回目以降になる)

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

java

1import java.util.Scanner; 2import java.util.Random; 3 4class Game { 5 public static void main(String[] args) { 6 System.out.println("じゃんけん勝負"); 7 System.out.println("グーチョキパーを数字で入力してね"); 8 System.out.println("0:グー"); 9 System.out.println("1:チョキ"); 10 System.out.println("2:パー"); 11 String[] hands = { "グー", "チョキ", "パー" }; 12 13 System.out.println("あいこで"); 14 Random rand = new Random(); 15 int com = rand.nextInt(3); 16 Scanner scan = new Scanner(System.in); 17 int myhand = scan.nextInt(); 18 19 boolean isFirst = true; 20 21 while (true) { 22 System.out.print("最初はグー、じゃんけん:"); 23 if (hands[com] == hands[myhand]) { 24 isFirst = false; 25 System.out.println(hands[com] + "(COM)" + "と" + hands[myhand] + "(Player)で..."); 26 System.out.println("あいこだよ"); 27 System.out.print("あいこで:"); 28 } else if ((com == 0 && myhand == 1) || (com == 1 && myhand == 2) || (com == 2 && myhand == 0)) { 29 System.out.println(hands[com] + "(COM)" + "と" + hands[myhand] + "(Player)で..."); 30 System.out.println("あなたの負け"); 31 break; 32 } else if ((com == 1 && myhand == 0) || (com == 2 && myhand == 1) || (com == 0 && myhand == 2)) { 33 System.out.println(hands[com] + "(COM)" + "と" + hands[myhand] + "(Player)で..."); 34 System.out.println("あなたの勝ち"); 35 break; 36 37 }while(isFirst){ 38 } if ((com == 0 && myhand == 1) || (com == 1 && myhand == 2) || (com == 2 && myhand == 0)) { 39 System.out.println(hands[com] + "(COM)" + "と" + hands[myhand] + "(Player)で..."); 40 System.out.println("あなたの負け"); 41 break; 42 } else if ((com == 1 && myhand == 0) || (com == 2 && myhand == 1) || (com == 0 && myhand == 2)) { 43 System.out.println(hands[com] + "(COM)" + "と" + hands[myhand] + "(Player)で..."); 44 System.out.println("あなたの勝ち"); 45 break; 46 } 47 48 } 49 } 50 } 51

試したこと

ランダムを他のクラスからの返しにしたり、go.while,if文を移動させる

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

勝ちなら
じゃんけん勝負
グーチョキパーを数字で入力してね
0:グー
1:チョキ
2:パー
最初はぐー、じゃんけん:1
パー(COM)とチョキ(Player)で…
あなたの勝ち

負けなら
じゃんけん勝負
グーチョキパーを数字で入力してね
0:グー
1:チョキ
2:パー
最初はぐー、じゃんけん:1
グー(COM)とチョキ(Player)で…
あなたの負け

あいこなら
じゃんけん勝負
グーチョキパーを数字で入力してね
0:グー
1:チョキ
2:パー
最初はぐー、じゃんけん:2
パー(COM)とパー(Player)で…
あいこだよ!
あいこで:1
グー(COM)とチョキ(Player)で…
あなたの負け

こんな感じになるそうです

ここにより詳細な情報を記載してください。

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

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

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

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

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

episteme

2023/05/04 18:03

コードみせて。
jimbe

2023/05/04 18:46 編集

そのまま書けば boolean isFirst=true; while(条件){ なんやかや isFirst=false; } と言うことでしょうか。
oas12

2023/05/05 02:19 編集

自分もjimbeさんと同じことを考えたのですが、知識が足らないのか上手くいきませんでした
m.ts10806

2023/05/05 02:11

質問は編集できます。 エラーはものによって対応が違ってくるので、都度都度潰すしかないかと。 現状、何ができていて何ができていないかをハッキリして、具体的に質問本文に記載してください。 解決したい問題を明確化したほうが回答も付きやすくなります。
jimbe

2023/05/05 09:38

>上手くいきませんでした 上手くいない原因を調べる方法を学ぶ必要があります。 コードは書いた通りに動作します。従って問題があるなら(ハード的な故障とかで無ければ)必ず理論的に見つかるはずです。 コンピュータになったつもりで、一行ずつ動作を追い、変数の変化もその都度メモするなりしていき、どこでどう動いているのか、想定ではどうなるなずなのかを比較することで、問題点が見つかるでしょう。
oas12

2023/05/05 10:11

回答していただいた方、ありがとうございました。 すぐ答えが欲しいと焦っていたのかもしれません、もう少し勉強してみます。
guest

回答2

0

ベストアンサー

箇条書きで書かれている問題文の通りに書くだけなのでは?

Java

1import java.util.Scanner; 2import java.util.Random; 3 4class Game { 5 public static void main(String[] args) { 6 Random rand = new Random(); // 1 7 Scanner scan = new Scanner(System.in); // 1 8 String[] hands = { "グー", "チョキ", "パー" }; // 1 9 // 2 10 System.out.println("じゃんけん勝負"); 11 System.out.println("グーチョキパーを数字で入力してね"); 12 System.out.println("0:グー"); 13 System.out.println("1:チョキ"); 14 System.out.println("2:パー"); 15 16 boolean isFirst = true; // 3 17 18 while (true) { // 4 19 // 5 20 if (isFirst) // 6 21 System.out.print("最初はグー、じゃんけん:"); 22 else // 7 23 System.out.print("あいこで:"); 24 25 int player = scan.nextInt(); // 8 26 int com = rand.nextInt(3); // 9 27 System.out.println(hands[com] + "(COM)" + "と" 28 + hands[player] + "(Player)で..."); // 10 29 // 11 30 if (com == player) // 12 31 System.out.println("あいこだよ"); 32 else if (com == player-1 || com == player+2) { // 13 33 System.out.println("あなたの負け"); 34 break; 35 } 36 else { // 14 37 System.out.println("あなたの勝ち"); 38 break; 39 } 40 System.out.println(); // 15 41 isFirst = false; // 16 42 } 43 } 44}

投稿2023/05/05 05:10

編集2023/05/05 05:23
kazuma-s

総合スコア8224

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

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

0

Whileを2つ使わなければならないと思って他のですが、そうゆうわけではないんですね•••

投稿2023/05/05 10:13

oas12

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問