実現したいこと
ここに実現したいことを箇条書きで書いてください。
一回目のwhileの最後でboolean型の変数をfalseに変えて、2回目以降はfalseのままループするじゃんけんゲームを作りたい。
前提
ここに質問の内容を詳しく書いてください。
java独学一か月目の者です。
じゃんけんゲームで1回目のwhileで「最初はグー、じゃんけんほい」と表示し、最後でboolean型の変数isFirstをfalseに変えます。2回目以降はfalseのままでループし、「あいこでしょ」と表示させたいです。
一回目のwhileは勝ち負けならそこで終わり、あいこならisFirstをfalseに変えて、2回目に移動。
2回目のwhileはあいこならループし、勝ち負けなら終わりだと思い、コードを書いたのですが。根本的に間違っていますか。
プロの方なら、以下の問題をどう回答しますでしょうか。コードを教えて頂きたいです。
問題文↓
- 初期化
ランダムクラスの準備をする
キーボード入力の準備をする
文字列型の配列 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)で…
あなたの負け
こんな感じになるそうです
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー