2012-03-30 7 views
1

を非静的変数を呼び出し、彼らは「猫」「犬」などと呼ばれている。..それは別のクラスで使用することができますので、私は、オブジェクトのいくつかのクラスを持っている問題</p> <p>を持って(インスタンス化することはできません)

これらのクラスの中で、私は各猫と犬のオブジェクトに独自の整数エネルギーレベルを割り当てました(二次元配列を「移動」するとエネルギーが失われてエネルギーが得られます)。 this.energylevelと言って参照しています。

"energylevel"は各オブジェクトに固有なので、静的にすることはできません。 "犬クラス"に静的に保存されている猫オブジェクトのエネルギーレベルを "犬クラス"に見せてもらうにはどうすればいいですか?

と私はイヌのクラス内でCat c = new Cat();をインスタンス化できません。これは既にメインメソッド内で実行されています。

これはので、私は明らかに十分

+0

あなたは 'Dog'は' Cat'を取得したいどうすればよいですか? – SLaks

+0

メインクラスの別のオブジェクトの間でデータを渡すヘルパーを作成できます。そうすれば、 'dogA'に' catA'が何をしているのか、 'dogA'に' dogB'のことを伝えることができます。 2つのパラメータを持つメソッドが必要になります.1つはオブジェクトに通知するメソッド、もう1つはオブジェクトに最初に通知するメソッドです。この情報を受け取り、それに反応する 'Dog'クラスと' Cat'クラスにメソッドを追加することができます。 – jzworkman

+1

解決策は、オブジェクト指向プログラミングまたはJavaの基礎を教えるすべての本にあります。 – Wolfgang

答えて

0

それを説明していない場合は、猫のIDに基づいて、非静的変数を返します猫のオブジェクト内の静的メソッドを追加することができ、私を許して、大規模なプロジェクトのすべての部分であります。 Catオブジェクトの中の静的マップにCatsのリストを保持する必要があります。

private static HashMap<String,Cat> cats = new HashMap<String,Cat>(); 
... 
public static int getEnergy(String catId) { 
    Cat myCat = cats.get(catId); 
    return myCat.getEnergy(); 
} 

public int getEnergy() { 
    return this.energy() 
} 

代わりに要求されたとして、あなたはX、Yで検索する場合:

private static ArrayList<Cat> cats = new ArrayList<Cat>(); 

private int energy = 100; 
private int x = 0; 
private int y = 0; 
... 
public static int getEnergy(int x, int y) { 
    //Energy of -1 being the error (not found) state. 
    int energy = -1; 
    for(Cat cat : cats) { 
     if(cat.getX() == x && cat.getY() == y) { 
      energy = cat.getEnergy(); 
     } 
    } 
    return energy; 
} 

public int getEnergy() { 
    return this.energy() 
} 

public int getX() { 
    return this.x; 
} 

public int getY() { 
    return this.y; 
} 
+0

ありがとうございましたGavinCattell、すばらしい答えですが、catのIDを2次元配列の位置と同じにする方法はありますか? – ssjg0ten5

+0

2つのオブジェクトを同じ場所に表示できますか? – GavinCattell

+0

いいえ、1つしかありません – ssjg0ten5

関連する問題

 関連する問題