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

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

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

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

Q&A

解決済

3回答

10921閲覧

じゃんけん3回先勝

pigry

総合スコア13

Java

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

0グッド

0クリップ

投稿2016/10/09 09:04

じゃんけんで先に3回買った方が勝ちというプログラムを書いていますが、実行すると勝ち数が0になり、じゃんけんすら行われずに終了してしまいます。
どうすれば良いのでしょうか・・・

java

1import java.util.*; 2 3public class Janken2 { 4 public static void main(String[] args) { 5 Scanner stdIn = new Scanner(System.in); 6 Random rand = new Random(); 7 int w=0; 8 int l=0; 9 while(w>2 || l>2){ 10 System.out.print("手(0:グー/ 1: チョキ/ 2:パー) ? "); 11 12 int h = stdIn.nextInt(); 13 int c = rand.nextInt(3); 14 int j = (c-h+3)%3; 15 16 17 print("人",h); 18 print("こんぴゅーた",c); 19 20 switch(j) { 21 case 0: System.out.println("あいこ"); break; 22 case 1: System.out.println("人の勝ち"); w++; break; 23 case 2: System.out.println("コンピュータの勝ち"); l++; break; 24 } 25 26 27 } 28 System.out.println("あなたの勝ち数は"+w); 29 } 30 public static void print(String s, int x) { 31 32 switch(x) { 33 case 0: System.out.println(s+"グー"); break; 34 case 1: System.out.println(s+"チョキ"); break; 35 case 2: System.out.println(s+"パー"); break; 36 } 37 38 39 40 } 41 42} 43 44 45

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

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

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

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

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

guest

回答3

0

質問の答え
前の回答者と同じです。

Java

1//while(w>2 || l>2){ 2while(w<3 && l<3) {

それ以外に気になる点

stdin.nextInt()
数字以外を入力すると例外が発生する。
数字0-2までしか許さないようチェックを追加するかどうか。後方の処理で%3しているが、仕様が曖昧。

print()
出力は1〜2までにしか対応せず。3以上を入力すると表示しない。仕様が曖昧。

テストケースの提示
できればJUnitのテストケースを仕様の代わりに提示してください。

発展問題として考えられること
複数の参加者でじゃんけんできるようにするには。
参加者がじゃんけんの履歴を見ながら戦略を変えるにはどうするか。

投稿2016/10/09 09:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

java

1while(w<3 && l<3){

結論から言うと、上のようにwhileの条件を逆にしてください。
元のコードでは1回もループを実行できません。(勝敗数が足りないから)

while文などの制御文は重要かつ間違えやすいので、注意してください。
そして、デバッグするときは、どの文が実行されているか、確認してください。


あと、インデントが微妙にそろってないので、なるべくそろえましょう。
なぜなら、このインデントは、制御文の構造を分かりやすくしてくれるからです。

また、変数名を「win」「lose」にするとか、変数名は普通の単語にした方が、
意味を確認しながら読み下しやすいので、間違いに気づきやすくなります。

具体的には、下記がインデントをそろえた一例です。制御文で下がっていますね。

java

1import java.util.*; 2 3class Ideone 4{ 5 6 public static void main(String[] args) { 7 8 Scanner stdIn = new Scanner(System.in); 9 Random rand = new Random(); 10 11 int w=0; 12 int l=0; 13 14 while(w<2 || l<2){ 15 System.out.print("手(0:グー/ 1: チョキ/ 2:パー) ? "); 16 17 int h = stdIn.nextInt(); 18 int c = rand.nextInt(3); 19 int j = (c-h+3)%3; 20 21 print("人",h); 22 print("こんぴゅーた",c); 23 24 switch(j) { 25 case 0: System.out.println("あいこ"); break; 26 case 1: System.out.println("人の勝ち"); w++; break; 27 case 2: System.out.println("コンピュータの勝ち"); l++; break; 28 } 29 } 30 System.out.println("あなたの勝ち数は"+w); 31 } 32 33 public static void print(String s, int x) { 34 35 switch(x) { 36 case 0: System.out.println(s+"グー"); break; 37 case 1: System.out.println(s+"チョキ"); break; 38 case 2: System.out.println(s+"パー"); break; 39 } 40 } 41}

投稿2016/10/09 09:22

編集2016/10/09 10:01
LLman

総合スコア5592

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

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

pigry

2016/10/09 13:19

なるほど、whileの条件が&&だったんですね・・・ ありがとうございました。
guest

0

Whileの判定文がおかしい気がします。
while(w <= 2 && l <= 2)
だと思いますが。

おそらく今のままだとwhile文の中に入らずに終わるはずです。

投稿2016/10/09 09:15

編集2016/10/09 09:19
kentei_syunrai

総合スコア946

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問