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

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

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

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

Q&A

4回答

3147閲覧

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

masanori-

総合スコア9

Java

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

0グッド

0クリップ

投稿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() + "!!!"); } }

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

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

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

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

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

mather

2018/09/20 03:06

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

2018/09/20 03:11

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

2018/09/20 04:17

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

2018/09/20 04:37

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

2018/09/20 04:49

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

2018/09/20 04:53

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

2018/09/20 04:54

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

回答4

0

最初に

直接的な回答にはならないかもしれませんが、
今後のためを見据えての内容を意識して書きます。

伝えたいこと

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

デバッグを覚えるべきだと思います。

端的に言うと「バグを取り除く作業」のことです。

もう少し具体的に言うと
「ブレークポイント」を使うことでプログラムを一時停止することができる。
一時停止中は、変数やフィールドの中身を見ることができ、
さらに値を変更することもできる。
という代物です。

なぜデバッグを覚えるべきか?

エラーを知るには
前提としてプログラムの動きを理解する必要があります。

ここでポイントなのは、
人の話から直接エラーを知ることはできないということです。

あくまでそれは考えるきっかけを与えているだけで
それを元に修正しているに過ぎないだけです。

結局、修正するにしても
プログラムの動きを理解していないと意味が無いわけです。
プログラムの動きを理解してやっとエラーが知れる訳です。

くどい言い回しですみません。

とにかく、ヒューマンエラーは完全に防げないですし
今ここに書いてる内容だって嘘が入ってるかもしれないです。
ただ、プログラムは嘘をつきません。書いたコードの通りに動きます。

なので質問者さんにはデバッグを覚えて欲しいということです。

デバッガの導入について

前の質問を拝見しましたが、
VSCodeを使っているとのことなので
Javaなら一般的にVSCodeの拡張機能(Java Extention Pack)かEclipseを
使用してデバッグをするのだと思います。

Eclipseを使うならEcllpseをインストールしてください。

検索ワードとしては
「Eclipse」「Java Eclipse デバッグ」辺りでしょうか。

VSCodeの拡張機能を使うなら
「Java VSCode Java Extention Pack 導入」や「Java Extention Pack デバッグ」
辺りでしょうか。

好きな方法を試してみてください。

使い方も同様に上記検索ワードでひっかかると思います。
それでも使い方が分からないときは、
ここでご返信されるか別途ご質問されると良いかと思います。

最後に

なぜこのような回答をしたかと申しますと
プログラムの動きについて
回答者さんとの会話のキャッチボールをする回数が多すぎるように見えたからです。

その根本的な原因は
きっとプログラムの動きがイメージできている自信がない所からだと思います。

まずは「デバッグ」の方法を教えることで
プログラムを止めながら実際に動きを確認するのが
質問者さんの長期的な問題解決にとって最善かと判断し、回答しました。

投稿2018/09/20 05:06

編集2018/09/20 07:25
BluOxy

総合スコア2663

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

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

0

ご提示いただいたコードの勝ち負け判定の後が以下の流れになっています。

  1. (プレイヤーが勝ちなら)前回の勝者をプレイヤーと記録
  2. (前回の勝者がプレイヤーかつプレイヤーが勝ちなら)プレイヤーのポイントを減らし、前回の勝者をリセット
  3. (プレイヤーが負けなら)前回の勝者をCPUと記録
  4. (前回の勝者がプレイヤーかつプレイヤーが負けなら)CPUのポイントを減らし、前回の勝者をリセット

1と2、3と4で同じ事が起きていますが、1と2を例に説明します。
まずプレイヤーが勝ったと仮定して話します。
プレイヤーが勝っていたら前回の勝者をプレイヤーと記録するので、
この時点で今回の勝者も前回の勝者もプレイヤーとなってしまっています。
そこで2連勝の判定を行っていますが、前回の勝者が更新されたところ直後なので
質問者様の思っている判定とは異なった判定をしています。

3と4のパターンもCPUが勝った(プレイヤーが負けた)として考えれば同様です。

つまり、前回の勝者(lastWinner)を更新している箇所が間違っています。
前回の勝者の更新は、その値を使い終わった後にするべきです。


【追記】
必要部分を抜粋したコードを追いながら説明します。
(提示されたコードの空行を消すなど若干手を加えましたが、処理自体は変えてません)

java

1/* 前提条件として「前回はCPUが勝った」として追います。 */ 2 3// 勝ち負け判定 4result = janken.judge(); /* 今回はプレイヤーが勝ったとします。 */ 5 6if(result == S結果.あいこ) { 7 System.out.println("あいこでしょ!"); 8} else if (result == S結果.勝ち) { /* ここの分岐に来ます */ 9 System.out.println("playerの勝ち"); 10 playerPt ++; /* プレイヤーに1点加算されます。 */ 11} else if (result == S結果.負け) { 12 System.out.println("cpuの勝ち"); 13 cpuPt ++; 14} else { 15 break; 16} 17 18/* この分岐に入ります。 */ 19if(result == S結果.勝ち) { 20 /* 前回の勝者をプレイヤーに更新します。 */ 21 /* ※この時点で前回の勝者はCPUだったはずなのに、 22  プレイヤーに更新されてしまいます。 */ 23 lastWinner = 1; 24} 25 26/* 直前の更新でlastWinnerが1になってしまい、今回はプレイヤーが勝ったので 27 この分岐に入ってしまいます。 */ 28if(lastWinner == 1 && result == S結果.勝ち) { 29 playerPt--; 30 lastWinner = 0; 31}

コード内にコメントで書きましたが改めて。
** 前回はCPUが勝ち、今回はプレイヤーが勝ったとして話を進めます。 **

まず、プレイヤーが勝ったのでplayerPtが1増えます。

java

1} else if (result == S結果.勝ち) { 2 System.out.println("playerの勝ち"); 3 playerPt ++; 4}

【問題点】次に、プレイヤーが勝ったのでlastWinnerを1(プレイヤー)にします。
** 前回の勝者はCPUだったのに、ここで前回の勝者はプレイヤーと書き換えられます。 **

java

1if(result == S結果.勝ち) { 2 lastWinner = 1; 3}

その結果、連勝と判断されて、本来は入らない連勝の分岐に入り、
playerPtが1減ります。

java

1if(lastWinner == 1 && result == S結果.勝ち) { 2 playerPt--; 3 lastWinner = 0; 4}

このような流れで、連勝していないのに連勝と判断され、ポイントが+1→-1で0になります。


プログラムは書いたとおりに実行されます。
お書きになったプログラムを実行して結果を見る他に、
実際にコードを見ながら「今ここが実行され、次はここに来て…」と指で指して、
混乱しないように変数の値を紙か何かにメモしながら値の更新を確認し、
プログラムの流れを追うことができるようにしていきましょう。

投稿2018/09/20 03:18

編集2018/09/20 04:27
dice142

総合スコア5158

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

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

masanori-

2018/09/20 03:56

度々、ありがとうございます。 if(lastWinner == 1 && result == S結果.勝ち) { playerPt--; lastWinner = 0; } 例えば、playerのif文の条件結果の部分ですと 「前回playerの勝ち」、「今回もplayerの勝ち」→-1ptされる 同時に「前回の勝者」↖この部分(「前回playerの勝ち」)が同じ{}内にあるので、処理として出てくる時には、「前回playerの勝ち」フラグはあったが、「前回の勝者」(lastWinner)の更新により、プラスマイナス0となって処理されているという事でしょうか? もし解釈の説明が分かり辛ければおっしゃって下さい、、
yukihisa

2018/09/20 04:16

masanori- 様 前回の質問から傍観しておりましたが、少々気になったので横から失礼させていただきます。 「こうですよ」の回答に対して「こうですか(もしくは次はどうしたらよいですか)」のオウム返しが多すぎると感じます(結果前回の質問のコメント欄の長いことこの上なし。。。)。 要するに、「思考を放棄するのが早すぎます」。 回答はきちんとされているのですから、それに対して一度自分なりに考えて、作業をして、それで失敗した場合に聞いてください。 ここは貴方の教育の場ではないので、1から10までを求めるのは筋違いです。 また、1から10まで聞くことが当たり前になってしまうと貴方が今後エンジニアとして成長できなくなってしまいます。 今は研修中とのことで時間にも余裕があるでしょうが、仕事として現場に出た際、納期が迫っている中でいちいちここで聞いて、回答を待って、また聞いて。。。という時間はありません。 デバッグしながらステップ実行をしたら上記の貴方の質問の答えはすぐに出ます。 自分で作業し、思考するという癖を付けないと今後「エンジニア」としてやっていけませんよ。
dice142

2018/09/20 04:30

> masanori-様 注目している範囲が狭いようでしたので回答にコードを追うような追記をしました。 変数の値を追えるよう紙とペンを用意し、一度ご自身でコードを指でなぞりながら プログラムの流れと変数の値の更新を追ってみてください。
dice142

2018/09/20 04:59

yukihisa様のコメントを見ずに回答修正しちゃって、yukihisa様と同じようなアドバイスを回答の一番下に載せてしまいました。 yukihisa様の仰る通り、1から10の質問はなるべく避けるべきですが、質問してはいけないということではないのでお間違えなきよう。 ただ、今のうちに自分で解決する力も付けましょう。 分かる人に聞けば早いのは当然といえば当然ですが、 聞いて早く解決するより時間をかけて自分で解決できると理解力も応用力も向上します。 字面なので勘違いされる方もいらっしゃいますが、皆様の言葉は厳しい指摘ではなく「的確なアドバイス」です。
yukihisa

2018/09/20 05:18

dice142 様 >聞いて早く解決するより時間をかけて自分で解決できると理解力も応用力も向上します。 まったくもってその通りですね。 特に「研修中」である今だからこそ思考にいくらでも時間をかけられるので、今のうちに自分で考え、問題解決する力を養って欲しいと思います。
opyon

2018/09/20 06:58

丸投げばかり続ける人には回答つかないでしょうけど・・・(と前置きして) 最初は答え見ながら写経した方が覚えやすいケースもあるのかなとも思います。 自分も未だに写経して覚えてる段階ですしその中から発見もあります。 特に最低限必要なコードだけで理解出来ない人には正解コード書いてあげたほうが良いこともあるのかなと。 コメントで質疑応答を続けてくれる方がいる間はいいのですがあまりに長すぎると見てる方もお互い疲れますよね。
dice142

2018/09/20 07:11

> opyon様 (写経を批判するわけではないです) 写経は写経で得るものはあるとは思いますが、ものによると思います。 サンプルコードがあるテキストやサイトを使う学習であれば 写経による学習は問題ないかと思いますが、 練習問題や演習などは自身で考えるという段階が必要だと思います。 さじ加減は難しいですが、早い段階で正解コードを載せてあげるのは少しやりすぎかなと個人的には思います。 コメントが長くなる件に関しては、初回の質問が解決した時点で打ち切るように 勧められなかった私のミスでもあるのですが、 新たに出た疑問に関しては別の質問として挙げ直してもらうよう勧めれば コメントが長くなることはそんなにないのかなと思います。 opyon様のおっしゃる通り、短いやり取りで解決されることに越したことはないですけどね。
opyon

2018/09/20 07:20

なるほど仰るとおりだと思います。
yukihisa

2018/09/20 07:30

個人的に「業務の一環」として携わるものに写経は良くないと考えています。 たとえ写経(丸写しや1から10まで言われるがまま作成)であれ、出来上がった成果物を受け取った場合、依頼者は「今後このレベルはできる」と見るからです。 写経から勉強する気のある独学者、学習中の意識がある人間ならば写経から得るものも多いと思いますが、業務や研修でとりあえずコピペで提出!という人間が写経から学ぶのか、というと必ずしもそうではないですよね。 今回の質問者様は自分なりに考えることはしているようですが、丸写しで課題を突破した場合、今後の憂いとして「この前やったからできるはず」と仕事を振られてもできずに怒られる・・・という状況が想像に難くありません(実際そういう人間を多々見ます)。 なので、僕は今回の場合などは極力コードを提示せずに思考の方向性を示して自己解決を促す、というようにしています。(そうしろ、というわけではありません。)
guest

0

java8で書き直しましたのでご参考までにどうぞ。

java

1import java.util.Random; 2 3public class qa147558 { 4 private static int rsp(int p, int c) { 5 int win = -1; 6 if (p != c) { 7 8 switch (p) { 9 10 case 1: 11 // =1=グー 12 if (c == 2) { 13 win = 0; 14 } else { 15 win = 1; 16 } 17 break; 18 case 2: 19 // =2=チョ 20 if (c == 3) { 21 win = 0; 22 } else { 23 win = 1; 24 } 25 break; 26 case 3: 27 // =3=パー 28 if (c == 1) { 29 win = 0; 30 } else { 31 win = 1; 32 } 33 break; 34 } 35 } 36 return win; 37 } 38 39 public static void main(String[] args) { 40 41 int lastwin = -2; 42 int[][] players = { { 0, 0 }, { 1, 0 } }; 43 int winner = -1; 44 45 String[] m = { "グー", "チョ", "パー" }; 46 String[] m_p = { "CPU1", "CPU2" }; 47 System.out.printf("%svs%s%n", m_p[0], m_p[1]); 48 49 Random r = new Random(); 50 51 while (winner < 0) { 52 53 // r:グー s:チョキ p:パー 54 int c = r.nextInt(3) + 1; 55 int p = r.nextInt(3) + 1; 56 57 int win = rsp(p, c); 58 59 System.out.printf("%svs%s ", m[p - 1], m[c - 1]); 60 61 if (win == -1) { 62 System.out.println("引分"); 63 continue; 64 } 65 if (lastwin == win) { 66 lastwin = -2; 67 System.out.printf("連勝 %s%n", m_p[win]); 68 } else { 69 players[win][1] += 1; 70 lastwin = win; 71 System.out.printf("勝者 %s%n", m_p[win]); 72 } 73 if (players[win][1] == 3) { 74 winner = win; 75 } 76 } 77 System.out.println(); 78 System.out.printf("最終勝者は %s%n", m_p[winner]); 79 } 80}

出力結果

CPU1vsCPU2 チョvsグー 勝者 CPU2 チョvsパー 勝者 CPU1 パーvsグー 連勝 CPU1 チョvsパー 勝者 CPU1 グーvsパー 勝者 CPU2 グーvsパー 連勝 CPU2 グーvsチョ 勝者 CPU1 最終勝者は CPU1

投稿2018/09/20 06:44

編集2018/09/20 06:45
opyon

総合スコア1009

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

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

opyon

2018/09/20 06:48

入力は出来てるようなので、ロジックだけでもご参考にどうぞ。
LouiS0616

2018/09/20 07:02

せっかく焼き直すなら、enumくらいは使った方が良いのでは。 質問者のコードでも使われてますし。
opyon

2018/09/20 07:04

ご指摘ありがとうございます。 enumですね、日頃あまり使ったことなかったので、練習してみます。
opyon

2018/09/20 09:29 編集

enumで実装しました。別質問あげていますのでもしよろしければご意見頂けたら幸いです。
guest

0

言語違いますが勝ち負けの状態と人とCPUとどちらも0,1で表せますのでロジックは読めるかと思います。
基本的なif文やwhile文やリストや辞書(map)しか使ってません。select文が無いのが残念。
ご参考までに。

Python3

1# coding=UTF-8 2import random 3 4def rsp(p, c): 5 6 win = -1 7 8 if p == c: 9 pass 10 else: 11 # =1=グー 12 if p == 1: 13 if c == 2: 14 win = 0 15 else: 16 win = 1 17 18 # =2=チョキ 19 if p == 2: 20 if c == 3: 21 win = 0 22 else: 23 win = 1 24 25 # =3=パー 26 if p == 3: 27 if c == 1: 28 win = 0 29 else: 30 win = 1 31 32 return win 33 34 35lastwin = -2 36sum_p = sum_c = 0 37players = [[0, 0], [1, 0]] 38winner = -1 39m = {1:'グー', 2:'チョ', 3:'パー'} 40m_p = {0:'CPU1', 1:'CPU2'} 41 42print(m_p[0], 'vs', m_p[1]) 43while winner < 0: 44 45 # r:グー s:チョキ p:パー 46 c = random.choice([1, 2, 3]) 47 48 # 入力面倒なのでCPUvsCPU 49 # p = int(input().rstrip()) 50 p = random.choice([1, 2, 3]) 51 52 print(m[c], m[p], end = ' ') 53 54 win = rsp(c, p) 55 56 if win == -1: 57 print('引分') 58 continue 59 60 if lastwin == win: 61# players[win][1] -= 1 62 lastwin = -2 63 print('連勝', m_p[win]) 64 else: 65 players[win][1] += 1 66 lastwin = win 67 print('勝者', m_p[win]) 68 69 if players[win][1] == 3: 70 winner = win 71print() 72print('最終勝者は', m_p[winner])
出力結果 CPU1 vs CPU2 チョ グー 勝者 CPU2 チョ チョ 引分 チョ グー 連勝 CPU2 チョ グー 勝者 CPU2 チョ チョ 引分 グー チョ 勝者 CPU1 グー チョ 連勝 CPU1 グー チョ 勝者 CPU1 グー パー 勝者 CPU2 最終勝者は CPU2

投稿2018/09/20 05:24

編集2018/09/20 05:43
opyon

総合スコア1009

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

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

fuzzball

2018/09/20 05:38 編集

コード見てないですが、「チョ グー 勝者 CPU2」のところでCPU2の勝利じゃないですかね?(念のため、低評価は私じゃないです。午前中の内に弾切れしてるのでw)
opyon

2018/09/20 05:36

その前に連勝で-1pされてます。
fuzzball

2018/09/20 05:37 編集

連勝のときは-1ではなく±0ですよ。(+1した後に-1されるので)
opyon

2018/09/20 05:38

なるほど理解しました。仕様の確認ミスです。
opyon

2018/09/20 05:40

マイナスする箇所を削除するだけで修正出来そうです。
yukihisa

2018/09/20 05:41

opyon 様 プログラミングの初心者で、自分の書いたコードの流れもきちんと把握できないレベルの質問者様に対して、入力もなく全自動のコードを提示して「言語は違うけどロジックはわかるでしょう」というのはいささか乱暴な気がします。
opyon

2018/09/20 05:45 編集

結構長いコードだったので大丈夫かなと思いましたが、配慮が足りずすみません。 後ほど時間あれば、javaでも書いてみますね。
opyon

2018/09/20 06:49

別回答としてjava8で書き直しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問