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

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

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

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

Q&A

解決済

2回答

643閲覧

じゃんけんをしてる様子を作りたい

nononeki_29

総合スコア3

Java

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

0グッド

1クリップ

投稿2020/06/05 17:47

編集2020/06/06 01:02

Java初心者で継承について勉強してるのですが
このようなエラーが発生してどれだけ調べてもわからなくて質問しました

発生している問題・エラーメッセージ

不適合な型:Playerをaokiに変換できません
ueda.StartJanken(Aoki,inoue);

不適合な型:Playerをaokiに変換できません
ueda.JudgeFinalWinner(Aoki,inoue);

該当のソースコード

Java>

1class Player{ 2 private String name; //名前 3 private int winCount = 0; //勝ち数(初期値:0) 4 5 6 public int getWinCount(){ 7//プレイヤーの勝ち数 8 9 winCount = winCount+1; 10 return winCount; 11 12 } 13 public String getName(){ 14 return name; 15 16 } 17 public Player (String name,int winCount){ 18 this.name = name; 19 this.winCount = winCount; 20 } 21} 22

Java

1 2class aoki extends Player{ 3 public aoki(String name,int winCount){ 4 super(name,winCount); 5 } 6 7 public int showHand(){ 8 int playerhand =0; //相手の出す手をグーで決定 9 return playerhand; 10 } 11} 12

Java

1 2class Inoue extends Player{ 3 public InoueString name,int winCount){ 4 super(name,winCount); 5 } 6 7 public int showHand(){ 8 int playerhand =0; //相手の出す手をパーで決定 9 return playerhand; 10 } 11} 12

Java

1 2//じゃんけんの審判を表すクラス 3 4class judge{ 5 6//じゃんけんを開始する 7 8 public void startJanken(aoki Aoki,Inoue inoue){ 9 System.out.println("【じゃんけん開始を開始します】"); 10 int a = Aoki.showHand(); 11 int b = inoue.showHand(); 12 13 String[] str = {"グー","チョキ","パ-"}; //表示列配列 14 System.out.println(Aoki.getName()+"は"+str[a]+"、"+inoue.getName()+"は"+str[b]+"です。"); 15 16 17 18//じゃんけんの判定 19 if((a==2 &&b==0)||(a==1 && b==2)||(a==0 && b==1)){ 20 System.out.println(Aoki.getName()+"の勝利"); 21 Aoki.getWinCount(); 22//player2win 23 }else if((a==0 && b==2)||(a==1 && b==0)||(a==2 && b==1)){ 24 System.out.println(inoue.getName()+"の勝利"); 25 inoue.getWinCount(); 26 27 28//引き分けの場合 29 }else if((a==0 && b==0)||(a==1&& b==1)||(a==2&& b==2)){ 30 System.out.println("引き分けの場合やり直し"); 31 32 } 33 } 34 35 36//勝者を決める 37 public void judgeFinalWinner(aoki Aoki,Inoue inoue){ 38 if(Aoki.getWinCount()>inoue.getWinCount()){ 39 System.out.println((Aoki.getWinCount()-2)+"対"+(inoue.getWinCount()-2)+"で"+Aoki.getName()+"の勝利"); 40 41 }else if(Aoki.getWinCount()<inoue.getWinCount()){ 42 System.out.println((Aoki.getWinCount()-3)+"対"+(inoue.getWinCount()-3)+"で"+inoue.getName()+"の勝利"); 43 } 44 } 45} 46

Java

1public class Objectjanken{ 2 public static void main(String[]args){ 3//審判(上田さん)のインスタンス 4 judge ueda = new judge(); 5//プレイヤー1とプレイヤー2の作成 6 Player Aoki = new aoki("青木",0); 7 Player inoue = new Inoue("井上",0); 8//2人のじゃんけんを開始する 9 10 ueda.startJanken(Aoki,inoue); 11 ueda.judgeFinalWinner(Aoki,inoue); 12 13 14 } 15} 16

補足

 
【じゃんけんを開始します】
青木はグー、井上はパーを出しました

井上さんの勝利です

0対1で井上勝利

と表示したら成功です

情報追記しました
初心者すぎてまともに質問もできず申し訳ないです…

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

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

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

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

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

m.ts10806

2020/06/05 21:10 編集

コードやエラーはマークダウンのcode機能を利用してご提示ください。 https://teratail.com/questions/238564 >inoueのクラスもありますが、aokiとほぼ一緒なので省略しています。必要ならはります ほぼ一緒と言ってもそれは誰にも分かりません。一字でも違えばそれはもう全く別のものです。 コピペで再現できる情報を提示されないことには答えようがありません。
dodox86

2020/06/05 22:08

> inoueのクラスもありますが、aokiとほぼ一緒なので省略しています。必要ならはります m.ts10806 さんのコメントでの指摘事項に加えて、Inoueクラスのコードが無ければ、もし回答者がそのコードを試してみようとしてもできません。 また、質問者さんが現にコメントで "inoue"クラスと書いていますが、クラス名は"Inoue"であり、変数名が"inoue"です。頭1文字が違います。 このように実際のコードと質問者さんの思っていることが違うケースがあるので、正確な回答の為にもコードは提示しましょう。コードの提示の際にはこれもm.ts10806さんの指摘と重なりますが、マークダウンを使ってください。なお、コンパイルエラーの原因は分かっていますが、今は回答しないでおきます。(恐らく他の回答者さんもすぐ分かります)
nononeki_29

2020/06/06 00:50

ご回答ありがとうございます 修正いたしましたのでご確認ください 大変ご迷惑をおかけしました
m.ts10806

2020/06/06 00:55

できればファイル毎にわけてください。
javahack

2020/06/06 01:02

今回の問題とは関係ないけど、クラス名:aoki、変数名:Aokiがとても気持ち悪い。 エラーになるわけではないですが、コードを読むのもストレスになるしバグを生みやすいので、なるべく標準的なコーディング規約に従うようにしましょう。
nononeki_29

2020/06/06 01:02

ファイル毎にわけました…!
nononeki_29

2020/06/06 01:08

javahack様 大変申し訳ございません Aokiとなってしまってるのは自分なりにエラー回避しようとしてた時の名残です… 見にくくしてすみません
guest

回答2

0

ベストアンサー

継承とはいえ、
Playerクラスとaoki(本来はAokiとすべき)クラス、Inoueクラスは別物です。

変数の型としてはインスタンス化するクラスそのものを指定しましょう。

java

1 aoki Aoki = new aoki("青木",0); 2 Inoue inoue = new Inoue("井上",0); 3

結局startJanken()でもjudgeFinalWinnerでも、(aoki,Inoue)で受け取っています。Playerでは通りません。

※この型を正したからと想定通り動くかはまた別問題。

投稿2020/06/06 01:20

m.ts10806

総合スコア80842

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

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

dodox86

2020/06/06 01:26

加えて、質問に提示のInoueクラスのコンストラクタでコンパイルエラーがあります。 > public Inoue(String name,int winCount){ '('カッコが全角文字になっています。Objectjanken.javaのコンパイルエラーで停まっていたので、気づかなかったのでしょうね。
nononeki_29

2020/06/06 01:31

ありがとうございました…!無事エラーが解消しました
javahack

2020/06/06 01:38

既に解決してますが、汎用的な使い方を考えるとstartJanken()、judgeFinalWinner()の引数の型を見直すという手もあります。
dodox86

2020/06/06 01:44

> 引数の型を見直すという手もあります。 それは私も思いましたが、Playerを適切に継承してからからのお話かなと思い、指摘しませんでした。今のかたちはPlayerクラスで持っててよさそうなshowHandメソッドがInoue、aokiクラスでそれぞれ持っていたりしたので。(スーパークラスのPlayerでまかなえるはずです) ついでに書けば、Inoue、aokiクラスと言うのもちょっと違うかも、と。nameで充分な気が。 (勉強中とのことで、あまり横からうるさく書きたくありませんのでこの辺で)
m.ts10806

2020/06/06 01:52

そうですね… 設計まで考えるとかなり
guest

0

ja

1コード

投稿2020/06/06 00:41

nononeki_29

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問