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

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

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

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

Q&A

解決済

1回答

1068閲覧

三つのクラスを関連させてジャンケンゲームを作りましたが、うまく機能しません。

chimo

総合スコア55

Java

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

0グッド

0クリップ

投稿2020/02/29 07:35

ジャンケンクラス(メインクラス)、プレーヤークラス、審判クラスの三つを関連させてジャンケンを行う一つのシステムを作りましたが、うまく機能しません。それぞれのシステムは以下のようにコードしました。

【ジャンケンクラス】

Java

1class Ex2_02_1_Janken { 2 public static void main (String[] args) { 3 4 //シナリオ①:コマンドライン引数から3人の名前を受け取る。 5 String ppl1 = args[0] ; 6 String ppl2 = args[1] ; 7 String ppl3 = args[2] ; 8 9 //シナリオ②:2名のプレイヤーと審判を場に登場させる。 10 Ex2_02_1_Player player1 = new Ex2_02_1_Player( ppl1 ) ; 11 Ex2_02_1_Player player2 = new Ex2_02_1_Player( ppl2 ) ; 12 Ex2_02_1_Judgement judgement = new Ex2_02_1_Judgement( ppl3 ) ; 13 14 //シナリオ③:それぞれのプレイヤーにジャンケンの手をださせる。 15 System.out.println("「じゃんけん…ぽん!!!!!」") ; 16 17 player1.makeHandStatus() ; 18 player2.makeHandStatus() ; 19 20 System.out.println( "「" + player1.name + "さんの手は" + player1.handStatus + "でした」" ) ; 21 System.out.println( "「" + player2.name + "さんの手は" + player2.handStatus + "でした」" ) ; 22 23 //シナリオ④:勝敗の結果を表示する。 24 System.out.println( "「結果は…」" ) ; 25 26 judgement.judgementResult(player1, player2) ; 27 28 } 29}

【プレーヤークラス】

Java

1import java.util.Random; 2 3class Ex2_02_1_Player { 4 5 //---フィールド---------------------------------------------- 6 7 String name ; //プレイヤーの名前 8 String handStatus ; //ジャンケンの手 9 10 //---コンストラクタ------------------------------------------------ 11 12 Ex2_02_1_Player(String nm_ply){ 13 name = nm_ply ; 14 } 15 16 //---メソッド------------------------------------------------------ 17 18 //makeHandStatusメソッド 19 void makeHandStatus(){ 20 21 String[] hands = { "グー", "チョキ", "パー" } ; 22 23 Random r = new Random() ; 24 handStatus = hands[r.nextInt(3)] ; 25 26 } 27}

【審判クラス】

Java

1class Ex2_02_1_Judgement { 2 3 //---フィールド---------------------------------------------- 4 5 String name ; //審判の名前 6 7 //---コンストラクタ------------------------------------------------ 8 9 Ex2_02_1_Judgement(String nm_jug){ 10 name = nm_jug ; 11 } 12 13 //---メソッド------------------------------------------------------ 14 15 //Judgementソッド 16 void JudgementResult(Ex2_02_1_Player player1, Ex2_02_1_Player player2){ 17 18 if(player1.handStatus.equals(player2.handStatus)){ 19 20 System.out.println( "審判" + judgement.name + "「あいこ!勝負つかず!!!」" ) ; 21 22 }else if(((player1.handStatus.equals("グー"))&&(player2.handStatus.equals("チョキ")))||((player1.handStatus.equals("パー"))&&(player2.handStatus.equals("グー")))||((player1.handStatus.equals("チョキ"))&&(player2.handStatus.equals("パー")))){ 23 24 System.out.println( "審判" + judgement.name + "「" + player1.name + "さんの勝ち」" ) ; 25 26 }else if(((player2.handStatus.equals("グー"))&&(player1.handStatus.equals("チョキ")))||((player2.handStatus.equals("パー"))&&(player1.handStatus.equals("グー")))||((player2.handStatus.equals("チョキ"))&&(player1.handStatus.equals("パー")))){ 27 28 System.out.println( "審判" + judgement.name + "「" + player2.name + "さんの勝ち」" ) ; 29 30 } 31 32 } 33}

目的は以下のように表示されることです。
【表示例】
(コマンドライン引数でプレーヤーと審判の名前を受け取る)
「じゃんけん...ぽん!!!!!」
「Aさんの手はパーでした」
「Bさんの手はグーでした」
審判C「Aさんの勝ち」

本当はセリフ部分は全て審判が言っていることにしたいのですが、審判クラスをうまく作成するのに苦戦しているため、ひとまずif構文の中身だけ審判に担当してもらうことにしています。

先に添付したメインクラス(ジャンケンクラス)をコンパイルすると以下のようなエラーが出てきてしまいます。
【コンパイル時に出てくるエラー】
Ex2_02_1_Janken.java:26: error: cannot find symbol
judgement.judgementResult(player1, player2) ;
^
symbol: method judgementResult(Ex2_02_1_Player,Ex2_02_1_Player)
location: variable judgement of type Ex2_02_1_Judgement
.\Ex2_02_1_Judgement.java:20: error: cannot find symbol
System.out.println( "審判" + judgement.name + "「あいこ!勝負つかず!!!」" ) ;
^
symbol: variable judgement
location: class Ex2_02_1_Judgement
.\Ex2_02_1_Judgement.java:24: error: cannot find symbol
System.out.println( "審判" + judgement.name + "「" + player1.name + "さんの勝ち」" ) ;
^
symbol: variable judgement
location: class Ex2_02_1_Judgement
.\Ex2_02_1_Judgement.java:28: error: cannot find symbol
System.out.println( "審判" + judgement.name + "「" + player2.name + "さんの勝ち」" ) ;
^
symbol: variable judgement
location: class Ex2_02_1_Judgement
4 errors

なぜ"Cannot find symbol"になっているのか分かりません。
どのようにコードを書けばエラーを回避できますでしょうか。

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

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

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

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

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

jimbe

2020/02/29 07:57

コードを修正した後, 全てコンパイルしているでしょうか.
chimo

2020/02/29 08:02

>jimbeさん 依存関係にある複数のクラスはメインクラスをコンパイルすれば全てのクラスがコンパイルされるから、メインのみコンパイルすれば良いと教わったので、メインのみコンパイルしております。
jimbe

2020/02/29 08:05

すいません, ちょっと C 言語の頭でした.
chimo

2020/02/29 14:19

C言語もできるんですね!すごいです!!
guest

回答1

0

ベストアンサー

Ex2_02_1_Judgement 内のエラーは, Ex2_02_1_Judgement 内には judgement という変数は無いことを言っています.

Ex2_02_1_Janken 内のエラーは, judgementResult メソッドが無いことを言っています.

投稿2020/02/29 08:01

jimbe

総合スコア13209

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

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

chimo

2020/03/01 03:38

二つともも一度よく見直してエラーを修正しましたところきちんとコンパイルされました!!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問