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

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

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

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

解決済

Javaでジャンケンゲームのコードを書きました、が参考にならないエラーが出るのでどこを修正すればよいか分かりません。

chimo
chimo

総合スコア0

Java

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

1回答

0評価

0クリップ

33閲覧

投稿2020/02/26 09:12

編集2022/01/12 10:58

Javaで最近はオブジェクト指向について勉強致しましたので、それを利用したジャンケンのコードを書いてみました。ジャンケンクラス(メイン)とプレーヤークラスにわけて作成しました。以下それぞれのクラスで行いことを記します。

●プレーヤークラス
【フィールド】
(※初期化はしない)

  • name(String型) …プレイヤー名
  • handStatus(String型) …ジャンケンの手

【コンストラクタ】
<引数> String型の文字列を1つ受け取る。
<処理> 引数で受け取った文字列をnameに設定。
【メソッド】

  • makeHandStatusメソッド

<引数 / 戻り値> なし
<処理> handStatusに「グー」「チョキ」「パー」のいずれかを ランダムに設定。

上記をふまえて私が作成したコードは以下の通りです。

Jave

class Ex2_02_1_Player { //---フィールド---------------------------------------------- String name ; //プレイヤーの名前 String handStatus ; //ジャンケンの手 //---コンストラクタ------------------------------------------------ class Ex2_02_1_Player(String nm){ name = nm ; } //---メソッド------------------------------------------------------ //makeHandStatusメソッド void makeHandStatus(){ Stirng[] hands = {"グー", "チョキ", "パー"} ; Random r = new Random() ; handStatus = hands[r.nextInt(3)] } }

●ジャンケンクラス
・メソッド - mainメソッド
<シナリオ①>
コマンドライン引数より2つの文字列を受け取る。 (ジャンケンを行う2名のプレイヤーの名前として利用)

<シナリオ②>
2名のプレイヤーを場に登場させる。(インスタンス化する) インスタンス化の際はコマンドライン引数で受け取った文字列をそれぞれ コンストラクタに渡す。

<シナリオ③>
それぞれのプレイヤーに手を握らせる。 ※握らせる前に「じゃんけん・・・ぽん!!!!!」というメッセージを画面に表示。 ※それぞれのプレイヤーがどんな手を出したか、それぞれ 「 (nameの値) さんの手:( handStatus の値))」の形で画面に表示。

<シナリオ④>
勝敗の結果を画面に表示する。 ※はじめに「結果は・・・」というメッセージを画面に表示。 ※あいこだった場合は「あいこ!勝負つかず!」というメッセージを画面に表示。 ※あいこでない場合は「(nameの値)さんの勝利!」というメッセージを画面に表示。

上記をふまえて私が作成したコードは以下の通りです。

Java

class Ex2_02_1_Janken { public static void main (String[] args) { //シナリオ①:コマンドライン引数から2名のプレイヤーの名前を受け取る。 String player1 = args[0] ; String player2 = args[1] ; //シナリオ②:2名のプレイヤーを場に登場させる。 Ex2_02_1_Player player1 = new Ex2_02_1_Player("args[0]") ; Ex2_02_1_Player player2 = new Ex2_02_1_Player("args[1]") ; //シナリオ③:それぞれのプレイヤーにジャンケンの手をださせる。 System.out.println("じゃんけん…ぽん!!!!!") ; player1.makeHandStatus() ; player2.makeHandStatus() ; System.out.println("モコさんの手:" + player1.handStatus) ; System.out.println("ポチさんの手:" + player2.handStatus) ; //シナリオ④:勝敗の結果を表示する。 System.out.println("結果は…") ; if(player1.handStatus==player2.handStatus){ System.out.println("あいこ!勝負つかず!!"); }else if(((player1.handStatus=="グー")&&(player2.handStatus=="チョキ"))||((player1.handStatus=="パー")&&(player2.handStatus=="グー"))||((player1.handStatus=="チョキ")&&(player2.handStatus=="パー"))){ System.out.println("モコさんの勝利!!"); }else if(((player2.handStatus=="グー")&&(player1.handStatus=="チョキ"))||((player2.handStatus=="パー")&&(player1.handStatus=="グー"))||((player2.handStatus=="チョキ")&&(player1.handStatus=="パー"))){ System.out.println("ポチさんの勝利!!"); }

メインメソッドが含まれるクラスの方をコンパイルすると以下のようなエラーが出てきます。

【エラー内容】
Ex_2_02_1_Janken.java:37: error: illegal character: '¥uff5d' }
Ex_2_02_1_Janken.java:38: error: illegal character: '¥uff5d' }
Ex_2_02_1_Janken.java:38: error: reached end of file while parsing }
Ex_2_02_1_Janken.java:39: error: reached end of file while parsing
4 errors

私的には、if文の構造を書く時もきちんと「{}」を使っているので、なぜ「{}」について指摘されなければならないのか分かりません。

エラーがしてきしてくるところ以外で自分があやしいとおもうのは、ジャンケンを判定する時のif文の書き方がおかしいのか、プレーヤークラスがおかしいのかかなぁ…と思っていますが、本当に間違ているとことはどの部分で、どうすればコンパイルされるのでしょうか...。

ご教授お願いいたします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

dodox86
dodox86

2020/02/26 10:16

質問の追記を受けて: 当初の質問への回答に対して質問内容を変え(あるいは要件を後出しで追加)するのは反則気味の行為です。(規約で禁止されているわけでは無いですけど、ちょっとマナー的にどうかと思います) コードを変えればエラーが変わるのは当然です。ご提示のコードはEx2_02_1_Jankenクラスですが、エラーになっているのはEx_2_02_1_Player.javaで、別のファイルですよね。それを質問中に追加して提示してください。また、別のファイルならコンパイル時のコマンドラインオプションも関係します。
chimo
chimo

2020/02/26 10:28

それは大変申し訳ありませんでした。自分としても別の質問として分けようか迷いましたが、じゃんけんゲームを完成させるという大きな目的は変わらないならば、同じところに質問を追記した方が今までの経緯なども見てもらえるので、情報が多くなるため、見てくださる方が分かりやすいかなぁと思ったので今回はあえて分けませんでしたが、以降は追記で質問することはないように心がけます。Ex_2_02_1_Player.javaもEx_2_02_1_Janken.javaもどちらのコードも質問中に載せております。あとコマンドラインオプションは使ったことが無いのでよく分かりません。
dodox86
dodox86

2020/02/26 10:38

> Ex_2_02_1_Player.javaもEx_2_02_1_Janken.javaもどちらのコードも質問中に載せております。 これは大変失礼しました。ソースの差分を見損ないました。 ちなみにお使いのJavaはOracle版ですか。それともOpenJDKでしょうか。 > じゃんけんゲームを完成させるという大きな目的は変わらないならば、 そうである場合、質問の題名も内容も変わろうかと思うのです。 当初の「参考にならないエラーが出るのでどこを修正すればよいか」と内容ならば、当該エラーの解消に回答が終始すると思います。
chimo
chimo

2020/02/26 11:03

>私が使ってるものはOracleのものです。 >確かにそうですね……。自分のタイトルを見直せば、このタイトルを見て解決しようと尽力して下さった回答者様に追加で新しい質問を押し付けるのは大変な失礼でした。きちんと1つの問題解決に1人のベストアンサーを決めるべきでした。今後はこのような失礼ないよう心がけます。初心者のため、無礼してしまい申し訳ございませんでした。また、ご指摘頂き大変ありがとうございました。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。