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

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

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

Eclipseは、IBMによって開発された統合開発環境 (IDE) の一つです。高機能ながらオープンソースであり、Javaをはじめとするいくつかの言語に対応しています。Eclipse-Pluginを使う事でIDEの拡張を行う事が可能です。

Java

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

Q&A

解決済

3回答

1038閲覧

じゃんけんゲームについて2

NEKOTABETAI

総合スコア14

Eclipse Plugin

Eclipseは、IBMによって開発された統合開発環境 (IDE) の一つです。高機能ながらオープンソースであり、Javaをはじめとするいくつかの言語に対応しています。Eclipse-Pluginを使う事でIDEの拡張を行う事が可能です。

Java

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

0グッド

0クリップ

投稿2020/08/13 13:38

前提・実現したいこと

あいこじゃなくなるまでじゃんけんをさせたいです

該当のソースコード

Jnaken

1package じゃんけん; 2 3public class Janken { 4 5 public static void main(String[] args) { 6 7 8 Player plyr = new Player(args[0]) ; 9 Player plyr2 = new Player(args[1]) ; 10 11 System.out.println("じゃんけん・・・ぽん!!") ; 12 13 14 System.out.println(plyr.name + "さんの手 :" + plyr.handstatus) ; 15 System.out.println(plyr2.name + "さんの手 :" + plyr2.handstatus ) ; 16 17 if(plyr.r == plyr2.r) { 18 System.out.println("あいこ!") ; 19 }else if (plyr.r == 2 & plyr2.r == 0) { 20 System.out.println(plyr2.name + "さんの勝ち") ; 21 }else if (plyr.r == 0 & plyr2.r == 2) { 22 System.out.println(plyr.name + "さんの勝ち") ; 23 }else if(plyr.r < plyr2.r) { 24 System.out.println(plyr2.name + "さんの勝ち") ; 25 }else if (plyr.r > plyr2.r) { 26 System.out.println(plyr.name + "さんの勝ち") ; 27 } 28 29 } 30 31}

Player

1package じゃんけん; 2 3import java.util.Random ; 4 5public class Player { 6 7 String name ; 8 String handstatus ; 9 int r ; 10 11 Player(String hito){ 12 13 this.name = hito ; 14 makeHandStatus() ; 15 16 17 } 18 19 void makeHandStatus() { 20 21 String[] hands = {"グー" , "パー" , "チョキ"} ; 22 23 Random ran = new Random() ; 24 25 r = ran.nextInt(3) ; 26 27 28 String hand = hands[r] ; 29 30 this.handstatus = hand ; 31 32 } 33}

試したこと

Java

1if(plyr.r == plyr2.r){ 2 System.out.println("あいこ!") ; 3 while(plyr.r == plyr2.r){ 4 Player plyr = new Player(args[0]) ;    //ここ 5 Player plyr2 = new Player(args[1]) ; //ここ 6 7 System.out.println("じゃんけん・・・ぽん!!") ; 8 9 10 System.out.println(plyr.name + "さんの手 :" + plyr.handstatus) ; 11 System.out.println(plyr2.name + "さんの手 :" + plyr2.handstatus ) ; 12 }

と入れてみたのですが↑の場所で重複変数plyrなどとエラーが出てしまいうまくいきませんでした。
ならそこを入れなければいいのかと思い、入れずにprintlnの文だけ入れると…
といった感じでうまくいきませんでした。

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

eclipseを使っているので文頭にエラーメッセージを出してくれます。
エラーとはそのことです。

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

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

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

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

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

guest

回答3

0

折角makeHandStatus()があるんですから、それを呼んだらいいんじゃないですかね?(あとちょっと手直し)

Java

1import java.util.Random; 2 3public class Janken { 4 5 public static void main(String[] args) { 6 Player p1 = new Player(args[0]); 7 Player p2 = new Player(args[1]); 8 9 System.out.println("じゃんけん・・・ぽん!!"); 10 System.out.println(p1.name + "さんの手 :" + p1.handstatus); 11 System.out.println(p2.name + "さんの手 :" + p2.handstatus); 12 13 while (p1.r == p2.r) { 14 System.out.println("あいこ!"); 15 16 p1.makeHandStatus(); 17 p2.makeHandStatus(); 18// p1 = new Player(args[0]); // まあこうでもいいでしょうけど 19// p2 = new Player(args[1]); 20 21 System.out.println("じゃんけん・・・ぽん!!"); 22 System.out.println(p1.name + "さんの手 :" + p1.handstatus); 23 System.out.println(p2.name + "さんの手 :" + p2.handstatus); 24 } 25 26 if (p1.r == 2 & p2.r == 0) { 27 System.out.println(p2.name + "さんの勝ち"); 28 } else if (p1.r == 0 & p2.r == 2) { 29 System.out.println(p1.name + "さんの勝ち"); 30 } else if (p1.r < p2.r) { 31 System.out.println(p2.name + "さんの勝ち"); 32 } else if (p1.r > p2.r) { 33 System.out.println(p1.name + "さんの勝ち"); 34 } 35 } 36} 37 38class Player { 39 private static final Random ran = new Random(); 40 private static final String[] hands = { "グー", "パー", "チョキ" }; 41 42 final String name; 43 String handstatus; 44 int r; 45 46 Player(String name) { 47 this.name = name; 48 makeHandStatus(); 49 } 50 51 void makeHandStatus() { 52 r = ran.nextInt(3); 53 this.handstatus = hands[r]; 54 } 55}

じゃんけんゲームについて2

どんどん増えていくんでしょうか?
エラー内容等、具体的なタイトルにしましょう。

エラーが出てしまいうまくいきませんでした。

エラーが出た場合↓のように、質問にそのままコピペで書きましょう。

エラー:(18, 20) java: 変数 plyrはすでにメソッド main(java.lang.String[])で定義されています

投稿2020/08/13 15:08

TN8001

総合スコア9244

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

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

NEKOTABETAI

2020/08/14 05:29

回答ありがとうございます。ご指摘次から気を付けます。 なぜPlayerの方にfinalをつけないといけないのですか?
TN8001

2020/08/14 05:36

final String nameこれですかね? 変わる可能性があるならつけれませんが、名前は変わらないと思うので付けました。 変わらないとわかっている場合、つける癖をつけておくと間違って変更してしまうミスを防げます^^
NEKOTABETAI

2020/08/14 05:41

なるほど。参考になります。
guest

0

ベストアンサー

プレイヤーが新しくなるわけではないので、plyrplyr2はそのままで、あいこのときはmakeHandStatusを実行して手を新しくしましょう。そうなると、ranはフィールドにして、Randomをコンストラクターで1度だけ実行するように変更したほうがいいでしょう。

そして、あいこのあとであいこになり……という展開もあるので、結局のところ、勝ち負けが決まるまで繰り返すようにすることになるでしょう。

Java

1 public static void main(String[] args) { 2 3 Player plyr = new Player(args[0]); 4 Player plyr2 = new Player(args[1]); 5 6 while (true) { 7 System.out.println("じゃんけん・・・ぽん!!"); 8 9 System.out.println(plyr.name + "さんの手 :" + plyr.handstatus); 10 System.out.println(plyr2.name + "さんの手 :" + plyr2.handstatus); 11 12 int katimake = (plyr.r - plyr2.r + 3) % 3; 13 14 if (katimake == 1) { 15 System.out.println(plyr.name + "さんの勝ち"); 16 break; 17 } else if (katimake == 2) { 18 System.out.println(plyr2.name + "さんの勝ち"); 19 break; 20 } 21 22 System.out.println("あいこ!"); 23 plyr.makeHandStatus(); 24 plyr2.makeHandStatus(); 25 } 26 27 }

投稿2020/08/13 15:08

Daregada

総合スコア11990

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

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

NEKOTABETAI

2020/08/14 05:40

回答ありがとうございます。判定システムが短くなってる!…すげぇ while文の条件にtrueを使うと無限ループになるのを初めて知りました。 とてもスマートで分かりやすかったです。
Daregada

2020/08/14 12:08

Javaはマイナスの値に対する剰余がマイナスになるので +3 しましたが、言語によっては、「(plyr.r - plyr2.r) % 3」だけで行けます(Pythonなど)。
NEKOTABETAI

2020/08/14 15:43

Pythonもそのうち手をつけてみたいです。 いつになるやら…w
guest

0

同じ変数名を複数回定義することはできません。
名前を変えましょう

投稿2020/08/13 14:04

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問