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
配列を作りたいだけなんですけど、配列の作り方を復習しましたが見た目合ってる気しかしませんでした。何が間違っているのでしょうか...。
ご教授お願いします!!!
回答1件
あなたの回答
tips
プレビュー