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

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

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

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

オブジェクト指向

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

Q&A

解決済

1回答

414閲覧

javaのオブジェクト指向で質問です

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

オブジェクト指向

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

0グッド

0クリップ

投稿2018/02/14 11:46

編集2018/02/14 12:54

前提・実現したいこと

javaのオブジェクト指向を勉強しています。

インスタンスを生成したメソッドとは別のメソッドで
インスタンスのメソッドを呼び出したいです。

追記:今書いてるコードを載せました。3人じゃんけんのゲームです。

lang

1public class BattleField implements Call { 2 3 // 配列と多態化を使ってないときはここでインスタンス生成出来た 4 // 5 // Player p = new Player(); 6 // Enemy1 e1 = new Enemy1(); 7 // Enemy2 e2 = new Enemy2(); 8 9 // これだとsyntax error on token";",{・・・ などがいっぱい出る 10 // 11 // Character[]c=new Character[3]; 12 // 13 // c[0]=new Player(); 14 // c[1]=new Enemy1(); 15 // c[2]=new Enemy2(); 16 public void Battle( int rounds) { 17 18 Character[] c = new Character[3]; 19 20 c[0] = new Player(); 21 c[1] = new Enemy1(); 22 c[2] = new Enemy2(); 23 24 int i = 1; 25 26 while ( i <= rounds) { 27 System.out.println( "●ラウンド" + i); 28 c[0].Hand(); 29 c[1].Hand(); 30 c[2].Hand(); 31 i = Judge( c[0].getPlayHand(), c[1].getEnemy1Hand(), c[2].getEnemy2Hand(), i); 32 33 } 34 35 } 36 37 public int Judge( int playHand, int enemy1Hand, int enemy2Hand, int i) { 38 39 if ( playHand == enemy1Hand && playHand == enemy2Hand && enemy1Hand == enemy2Hand) { 40 System.out.println( "あいこです"); 41 } 42 else if ( !(playHand == enemy1Hand) && !(playHand == enemy2Hand) && !(enemy1Hand == enemy2Hand)) { 43 System.out.println( "あいこです"); 44 } 45 else { 46 if ( !(playHand == ROCK) && !(enemy1Hand == ROCK) && !(enemy2Hand == ROCK)) { 47 switch ( playHand) { 48 case SCISSORS: 49 c[0].addWin(); 50 System.out.println( "勝ちました"); 51 break; 52 case PAPER: 53 System.out.println( "負けました"); 54 break; 55 } 56 switch ( enemy1Hand) { 57 case SCISSORS: 58 c[1].addWin(); 59 } 60 switch ( enemy2Hand) { 61 case SCISSORS: 62 c[2].addWin(); 63 } 64 } 65 else if ( !(playHand == SCISSORS) && !(enemy1Hand == SCISSORS) && !(enemy2Hand == SCISSORS)) { 66 switch ( playHand) { 67 case PAPER: 68 c[0].addWin(); 69 System.out.println( "勝ちました"); 70 break; 71 case ROCK: 72 System.out.println( "負けました"); 73 break; 74 } 75 switch ( enemy1Hand) { 76 case PAPER: 77 c[1].addWin(); 78 } 79 switch ( enemy2Hand) { 80 case PAPER: 81 c[2].addWin(); 82 } 83 } 84 else if ( !(playHand == PAPER) && !(enemy1Hand == PAPER) && !(enemy2Hand == PAPER)) { 85 switch ( playHand) { 86 case ROCK: 87 c[0].addWin(); 88 System.out.println( "勝ちました"); 89 break; 90 case SCISSORS: 91 System.out.println( "負けました"); 92 break; 93 } 94 switch ( enemy1Hand) { 95 case ROCK: 96 c[1].addWin(); 97 } 98 switch ( enemy2Hand) { 99 case ROCK: 100 c[2].addWin(); 101 } 102 } 103 104 i++; 105 } 106 return i; 107 } 108 109 public void Result( int rounds) { 110 111 System.out.println( "-------------結果------------"); 112 System.out.println( "あなた:" + c[0].getWinCount() + "勝" + (rounds - c[0].getWinCount()) + "敗" + "勝率" + 100 * c[0].getWinCount() / rounds + "%"); 113 System.out 114 .println( "プレイヤー1:" + c[1].getWinCount() + "勝" + (rounds - c[1].getWinCount()) + "敗" + "勝率" + 100 * c[1].getWinCount() / rounds + "%"); 115 System.out 116 .println( "プレイヤー2:" + c[2].getWinCount() + "勝" + (rounds - c[2].getWinCount()) + "敗" + "勝率" + 100 * c[2].getWinCount() / rounds + "%"); 117 } 118 119} 120 121 122public class Jyanken { 123 124 public void play() { 125 126 System.out.print( "aゲーム回数を入力してください:"); 127 128 @SuppressWarnings( "all") 129 int rounds = new java.util.Scanner( System.in).nextInt(); 130 131 System.out.println( "ジャンケンゲームを開始します。"); 132 System.out.println( "----------------------------------------------------------"); 133 System.out.println( "0:グー 1:チョキ 2:パー"); 134 System.out.println( "----------------------------------------------------------"); 135 136 BattleField battle = new BattleField(); 137 battle.Battle(rounds); 138 battle.Result(rounds); 139 140 // プレイヤーを3人作る 141 // 継承と多様性をつかう 142 // それぞれのプレイヤーの手を作る 143 // 判定プログラムで判定する 144 // それぞれの手をプレイヤーで記憶する 145 // ゲーム回数繰り返す 146 // 結果 全員の結果と勝率を求める 147 148 } 149 150} 151

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

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

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

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

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

LouiS0616

2018/02/14 11:48

意味が分かりません。正常に動作しなくてもかまいませんから、イメージを反映するようなコードを書いてみてください。
guest

回答1

0

ベストアンサー

あ、ひょっとしてこういうことです?

Java

1class Hoge { 2 void hoge() { 3 System.out.println("hoge"); 4 } 5} 6 7class Main { 8 private Hoge hoge_; 9 10 private Main() { 11 method1(); 12 method2(); 13 } 14 private void method1() { 15 hoge_ = new Hoge(); 16 } 17 private void method2() { 18 hoge_.hoge(); 19 } 20 21 public static void main(String[] args) { 22 new Main(); 23 } 24}

実行結果

hoge

質問編集を受けて

とりあえず目的を達成するには次のどっちかにすればよいかと。

Java

1public class BattleField implements Call { 2 ... 3 private Character[] c = new Character[]{ 4 new Player(), 5 new Enemy1(), 6 new Enemy2() 7 }; 8 ... 9}

あるいは

Java

1public class BattleField implements Call { 2 ... 3 private Character[] c = new Character[3]; 4 ... 5 public void Battle(int rounds) { 6 ... 7 c[0] = new Player(); 8 c[1] = new Enemy1(); 9 c[2] = new Enemy2(); 10 ... 11 } 12 ... 13}

後者の方が融通は利きますね。

コメントでの指摘を受けて

本来ならその手の初期化はコンストラクタに書くのが妥当ではないかと。

Java

1public class BattleField implements Call { 2 ... 3 private Character[] c; 4 ... 5 BattleField() { 6 c = new Character[] { 7 new Player(), 8 new Enemy1(), 9 new Enemy2() 10 }; 11 } 12 ... 13}

行き当たりばったりでフィールドが増減するのは好ましくないので、
事前に状態として何が必要か整理した方が良いでしょう。

投稿2018/02/14 12:13

編集2018/02/14 13:31
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2018/02/14 13:09

できました!ありがとうございます!!
swordone

2018/02/14 13:20

本来ならその手の初期化はコンストラクタに書くのが妥当ではないかと。
LouiS0616

2018/02/14 13:27

ですね。修正しておきます。 元のコードが煩雑なのでとりあえずの解消法だけ書いてしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問