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

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

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

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

オブジェクト指向

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

Q&A

解決済

1回答

712閲覧

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

chimo

総合スコア55

Java

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

オブジェクト指向

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

0グッド

0クリップ

投稿2020/02/26 09:12

編集2020/02/26 09:57

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

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

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

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

  • makeHandStatusメソッド

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

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

Jave

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){ 13 name = nm ; 14 } 15 16 //---メソッド------------------------------------------------------ 17 18 //makeHandStatusメソッド 19 void makeHandStatus(){ 20 21 Stirng[] hands = { "グー", "チョキ", "パー" } ; 22 23 Random r = new Random() ; 24 handStatus = hands[r.nextInt(3)] ; 25 26 } 27}

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

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

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

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

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

Java

1class Ex2_02_1_Janken { 2 public static void main (String[] args) { 3 4 //シナリオ①:コマンドライン引数から2名のプレイヤーの名前を受け取る。 5 String player_1 = args[0] ; 6 String player_2 = args[1] ; 7 8 //シナリオ②:2名のプレイヤーを場に登場させる。 9 Ex2_02_1_Player player1 = new Ex2_02_1_Player( player_1 ) ; 10 Ex2_02_1_Player player2 = new Ex2_02_1_Player( player_2 ) ; 11 12 //シナリオ③:それぞれのプレイヤーにジャンケンの手をださせる。 13 System.out.println("じゃんけん…ぽん!!!!!") ; 14 15 player1.makeHandStatus() ; 16 player2.makeHandStatus() ; 17 18 System.out.println( player1.name + "さんの手:" + player1.handStatus) ; 19 System.out.println( player2.name + "さんの手:" + player2.handStatus) ; 20 21 //シナリオ④:勝敗の結果を表示する。 22 System.out.println("結果は…") ; 23 24 if(player1.handStatus==player2.handStatus){ 25 26 System.out.println("あいこ!勝負つかず!!"); 27 28 }else if(((player1.handStatus=="グー")&&(player2.handStatus=="チョキ"))||((player1.handStatus=="パー")&&(player2.handStatus=="グー"))||((player1.handStatus=="チョキ")&&(player2.handStatus=="パー"))){ 29 30 System.out.println( player1.name + "さんの勝利!!" ); 31 32 }else if(((player2.handStatus=="グー")&&(player1.handStatus=="チョキ"))||((player2.handStatus=="パー")&&(player1.handStatus=="グー"))||((player2.handStatus=="チョキ")&&(player1.handStatus=="パー"))){ 33 34 System.out.println( player2.name + "さんの勝利!!" ); 35 36 } 37 } 38}

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

【エラー内容】
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文の書き方がおかしいのか、プレーヤークラスがおかしいのかかなぁ…と思っていますが、本当に間違ているとことはどの部分で、どうすればコンパイルされるのでしょうか...。

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

【新たなエラー内容】
先のエラーは解決しましたが、再度メインクラスの方をコンパイルしようとすると以下のようなエラーが表示されます。
Ex_2_02_1_Player.java:21: error: cannot find symbol
String[] hands = { "グー", "チョキ", "パー" }
symbol: class String
location: class Ex2_02_1_Player
1 error

配列を作りたいだけなんですけど、配列の作り方を復習しましたが見た目合ってる気しかしませんでした。何が間違っているのでしょうか...。

ご教授お願いします!!!

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

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

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

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

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

dodox86

2020/02/26 10:16

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

2020/02/26 10:28

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

2020/02/26 10:38

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

2020/02/26 11:03

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

回答1

0

ベストアンサー

37行目と38行目の}が、全角文字の(UTF16 \uff5d)になっています。その為、カッコを閉じたことになっていません。修正しましょう。


追記しました:

ご質問に追記された新たなエラーについては、こちらで試したところご提示のEx2_02_1_Player.java について単なるスペルミスから来る同等のエラーが報告されます。Stirngではなく、Stringです。

CMD

1C:>javac Ex2_02_1_Player.java 2Ex2_02_1_Player.java:21: エラー: シンボルを見つけられません 3 Stirng[] hands = { "グー", "チョキ", "パー" } ; 4 ^ 5 シンボル: クラス Stirng 6 場所: クラス Ex2_02_1_Player 7エラー1個

質問文中のエラー内容ではStringでエラー報告されているようですが、おかしいですね。ファイルを正しく保存できているかなど再度確認して試してみてください。

投稿2020/02/26 09:22

編集2020/02/26 10:58
dodox86

総合スコア9183

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

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

chimo

2020/02/26 09:48

なるほど。。。半角と全角の違いだったんですね。パっと見全く気づきませんでした。この部分を修正して、以降気を付けます。
dodox86

2020/02/26 11:10

追記後の結果: ご提示のEx2_02_1_Player.javaファイル中のStirng を Stringに直すと、プログラムは(恐らく)質問者さんのご要望どおり動作しているように見えます。 C:>javac Ex2_02_1_Player.java C:>javac Ex2_02_1_Janken.java C:>java Ex2_02_1_Janken player1 player2 じゃんけん…ぽん!!!!! player1さんの手:パー player2さんの手:グー 結果は… player1さんの勝利!! C:>
chimo

2020/02/26 11:12

ご指摘いただいた部分今修正しました!作動してみたところきちんと動きました!!dodox86さんのおかげです!!ありがとうございました!!プログラムがちゃんと動いてくれたときすごく嬉しかったです!!^^
dodox86

2020/02/26 11:15 編集

> プログラムがちゃんと動いてくれたときすごく嬉しかったです!!^^ お役に立てて何よりでした。質問者さんのプロフィールとこれまでの質問回答を拝見し、誠実に取り組んでおられると思い、回答させていただいた次第です。引き続き頑張ってください。応援しております。
chimo

2020/02/26 13:47

>お役に立てて何よりでした。 返信ありがとうございます!プロフィールと過去の質問まで拝見されていたとは知りませんでした。わざわざ目を通してくださりありがとうございます。これからも諦めずに学習を続けていきます(*^-^*)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問