前提・実現したいこと
エラーメッセージを解消したい。
なぜstaticであると言われるのですか、staticではないようなものであると思うのですが。
発生している問題・エラーメッセージ
エラーメッセージ
Mater.java:33:エラー:staticでないメソッドreceiveCard(card)をstaticコンテキストから参照することができません
該当のソースコード
public class Master{
/** プレイヤーのリスト */
private ArrayList players_ = new ArrayList();
/**
* ゲームの準備をする。
*
* @param cards トランプを進行役の手札として渡す
*/
public void prepareGame(Hand cards){
System.out.println("【カードを配ります】");
// トランプをシャッフルする
cards.shuffle();
// トランプの枚数を取得する
int numberOfCards = cards.getNumberOfCards();
// プレイヤーの人数を取得する
int numberOfPlayers = players_.size();
for(int index = 0; index < numberOfCards; index++){
// カードを一枚引く
Card card = cards.pickCard(0);
// 各プレイヤーに順番にカードを配る
Player player = (Player)players_.get(index % numberOfPlayers);
Player.receiveCard(card); //該当箇所
}
}
public abstract class Player{
/** 名前 */
protected String name_;
/** テーブル */
protected Table table_;
/** 手札 */
protected Hand myHand_ = new Hand();
/** 進行役 */
protected Master master_;
/** ルール */
protected Rule rule_;
/**
* コンストラクタ。
*
* @param name 名前
* @param master 進行役
* @param table テーブル
* @param rule ルール
*/
public Player(String name, Master master, Table table, Rule rule){
this.name_ = name;
this.master_ = master;
this.table_ = table;
this.rule_ = rule;
}
/**
* 順番を指名する。
* 実際の処理はサブクラスで記述すること。
*
* @param nextPlayer 次のプレイヤー
*/
public abstract void play(Player nextPlayer);
/**
* カードを配る。
* カードを受け取った時の処理を拡張したい場合は、
* 本メソッドをサブクラスでオーバーライドすること。
* @param card 受け取ったカード
*/
public void receiveCard(Card card){ // 該当メソッド
// 受け取ったカードを手札に加える
myHand_.addCard(card);
}
public class Hand{
/** 手札にあるカードを保持するためのリスト */
private ArrayList hand_ = new ArrayList();
/**
* カードを加える。
*
* @param card 加えるカード
*/
public void addCard(Card card){
// カードをリストの最後に追加する
hand_.add(card); //該当箇所
}
試したこと
課題に対してアプローチしたことを記載してください
補足情報(言語/FW/ツール等のバージョンなど)
'''Java
public abstract class Player{
/** 名前 */
protected String name_;
/** テーブル */
protected Table table_;
/** 手札 */
protected Hand myHand_ = new Hand();
/** 進行役 */
protected Master master_;
/** ルール */
protected Rule rule_;
/**
- コンストラクタ。
- @param name 名前
- @param master 進行役
- @param table テーブル
- @param rule ルール
*/
public Player(String name, Master master, Table table, Rule rule){
this.name_ = name;
this.master_ = master;
this.table_ = table;
this.rule_ = rule;
}
/** - 順番を指名する。
- 実際の処理はサブクラスで記述すること。
- @param nextPlayer 次のプレイヤー
*/
public abstract void play(Player nextPlayer);
/**
- カードを配る。
- カードを受け取った時の処理を拡張したい場合は、
- 本メソッドをサブクラスでオーバーライドすること。
- @param card 受け取ったカード
*/
public void receiveCard(Card card){ // 該当メソッド
// 受け取ったカードを手札に加える
myHand_.addCard(card);
}
'''
'''Java
public class Hand{
/** 手札にあるカードを保持するためのリスト */
private ArrayList hand_ = new ArrayList();
/**
- カードを加える。
- @param card 加えるカード
*/
public void addCard(Card card){
// カードをリストの最後に追加する
hand_.add(card); //該当箇所
}
'''
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
単純な書き間違いで、本来インスタンスのplayer
から呼ぶべきメソッドを、間違えてクラスのPlayer
に対して呼んでいます(大文字小文字が違います)。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Player.receiveCard(card); //該当箇所
「クラス名.メソッド名」はそのクラスのstaticメソッドにアクセスする書き方です。
この上の行で宣言しているPlayerクラスのインスタンス「player」のインスタンスメソッドにアクセスするには「player.receiveCard(card)」というように記述する必要があります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/06/09 11:16