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

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

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

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

受付中

Java:「じゃんけんゲーム」でコンパイルしてもスコアが反映されない状態です。ソースコードでおかしい点は、どこにありますでしょうか?

masanori-
masanori-

総合スコア0

Java

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

4回答

0評価

0クリップ

2347閲覧

投稿2018/09/20 02:59

失礼いたします。

今社内の研修でJavaを使用して「じゃんけんゲーム」を制作しております。

処理内容はこちらです。
・playerとCPUの2人でじゃんけんをする。
・playerは「1:グー、2:チョキ、3:パー」で整数を選択し、CPUは出目をランダム表示。
・先に3勝した方の勝ちとする
・2連勝したら-1ptされる ※

※2連勝したら-1ptされる

「2連続で勝利した場合、同時にその方に-1pt」
例えば、
1回戦目 playerが勝ち:CPUが負け スコア【1pt:0pt】
2回戦目playerが勝ち:CPUが負け スコア【2pt:0pt】
しかしここでplayerが2連勝なので、-1pt スコア【1pt:0pt】
3回戦目



というような流れの処理となる。

2連勝して-1ptの処理が発生した後は、連勝のカウントをリセットし、続きを始めます。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

本題なのですが、上の処理内容で「2連勝したら-1ptされる 」を加えたところでコンパイルすると
エラーは起きないのですがスコアが表示されません。
結果が「あいこ」になった時のみスコアは表示されるみたいです。

下記のソースコードの「//勝ち負け判定」の場所にある
System.out.println("player" + playerPt + "対cpu" + cpuPt);
if(playerPt >= 3) {

System.out.println("playerの・・・"); break; } else if(cpuPt >= 3) { System.out.println("playerの・・・"); break; }

この部分がスコアにあたるコードです。
このスコアの処理の上に「2連勝したら-1ptされる」の処理を打ち込んでいて
おそらくはそこからの干渉・不備が原因ではないかと考え、 break;を入れる事も試したのですが、違うみたいでした。
じゃんけんの動作は正常に動いているので、スコアが表示され、なおかつ「2連勝したら-1ptされる」の処理も反映されるようにするには
どこ部分を修正すればよいのでしょうか?

プログラミング初心者ということもあり、理解に時間が掛かったりもありますが、出来るだけ分かり易くお願いできればと存じます、、

宜しくお願い致します。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

package janken; import janken.Enums.ErrorInfo; import janken.Enums.S手; import janken.Enums.S結果; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * じゃんけん実行クラス */ public class ExeJanken { /** * じゃんけん実行 * * @param args */ public static void main(String[] args) { S結果 result = null; int playerPt = 0; int cpuPt = 0; int lastWinner = 0; //勝敗が決まるまで実施 while(true) { // Playerの手を取得 S手 playerHand = readPlayerHand(); if(playerHand == null) { // 未入力で終了 return; } // 手をセット Janken janken = new Janken(playerHand); // 手を表示 System.out.println(" → " + janken.getInputHand()); // 勝ち負け判定 result = janken.judge(); if(result == S結果.あいこ) { System.out.println("あいこでしょ!"); } else if (result == S結果.勝ち) { System.out.println("playerの勝ち"); playerPt ++; } else if (result == S結果.負け) { System.out.println("cpuの勝ち"); cpuPt ++; } else { break; } if(result == S結果.勝ち) { lastWinner = 1; } if(lastWinner == 1 && result == S結果.勝ち) { playerPt--; lastWinner = 0; } if(result == S結果.負け) { lastWinner = 2; } if(lastWinner == 2 && result == S結果.負け) { cpuPt--; lastWinner = 0; } System.out.println("player" + playerPt + "対cpu" + cpuPt); if(playerPt >= 3) { System.out.println("playerの・・・"); break; } else if(cpuPt >= 3) { System.out.println("playerの・・・"); break; } } // 結果を表示 outputResult(result); } /** * Playerの手を入力 * * @return 入力した手 */ private static S手 readPlayerHand() { // 標準入力を1行バッファ BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); // 正しい値が読み込まれるまでループ String line = null; while(true) { System.out.print("じゃんけん[1:グー、2:チョキ、3:パー ※未入力Enterで終了] : "); try { // 入力文字列を取得(1行) line = input.readLine(); if(line.trim().isEmpty()) return null; // 入力チェック ErrorInfo errInfo = validate(line); if(null != errInfo){ System.out.println(errInfo.getMsg()); continue; } } catch (IOException e) { e.printStackTrace(); } break; } // Playerの手を返却 return S手.getEnum(Integer.parseInt(line)); } /** * 入力チェック * * @param inValue チェックする文字列 * @return エラー情報 正常の場合:null、異常の場合:エラー情報 */ private static ErrorInfo validate(String inValue) { //桁数チェック if(inValue.length() != 1) return ErrorInfo.LENGTH_ERROR; //入力文字チェック if(!inValue.matches("[123]")) return ErrorInfo.INVALID_VALUE; return null; } /** * 結果出力 */ private static void outputResult(S結果 result) { System.out.println(result.name() + "!!!"); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

mather
mather

2018/09/20 03:06

社内研修の内容は社内の方に質問してはいかがでしょうか…?
masanori-
masanori-

2018/09/20 03:11

ありがとうございます。質問はteratailを使うよう言われております。現場に出たとき自分で考えても分からない事があり現場の人に聞けない状況を想定してのことだそうです。
Zuishin
Zuishin

2018/09/20 04:17

ということは真の課題はプログラミングではなくて質問の仕方ということになりませんか? どのような質問の仕方をすればいいのかが研修課題だとすると、それをまず調べなければいけませんが、調べましたか? またこの質問にはマークダウンの使われていない部分など未熟なところが散見されます。回答のつくつかないに関わらず、研修なので直した方がいいのではありませんか?
dice142
dice142

2018/09/20 04:37

社内研修だったのですね。「現場に出て仕事して現場の人に聞けない」というのは危険な匂いがしますが。。。(現場の仕事内容をネットで質問するのは危険すぎませんか?) 質問することは決して悪いことではなく、ご自身が成長するために必要なものです。ただ、他の皆様の仰る通り質問しっぱなしではなく、ご自身で考える時間を設けてそれでもわからなければ質問する、質問するにしても見やすい質問にするよう心がけるなど、エンジニアとしても質問者としても成長していきましょう。
yukihisa
yukihisa

2018/09/20 04:49

大事なのが、「ここで質問をする」というインプットに対して、「回答(アウトプット)がなされるまでの間何をするのか」です。現状の流れを見ていると画面の前でアラートが出るまでぼけーっと待っている様な気がしてなりません・・・というか、現場では作業が終わらないうちから別作業をするなんて新人の内は混乱のもとになるので、そうせざるを得ない状況になりません?その辺り研修の監督\(上司?先輩?\)はどうお考えなのか非常に興味があります。。。
m.ts10806
m.ts10806

2018/09/20 04:53

目指すのはteratailの質問者ですか?エンジニアですか?
m.ts10806
m.ts10806

2018/09/20 04:54

言われたことを言われるままにするのはエンジニアではないですよ。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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