2011-08-15 15 views
0

これはよくある質問ですが、私が読んだすべてのものについては、さまざまなことに対処しているようです。Javaのクラスの外部からメソッドを呼び出す

私は別のクラスのオブジェクトの配列を管理するメインクラスのプログラムを作成していますが、メインクラスの中からこの2番目のクラスのprint()メソッドを呼び出すのが難しいです。

MainクラスはUnitクラスのprint()を呼び出そうとします。ユニットクラスは次のようになります。

public class Unit{ 

    static int numOfUnits = 0; 
    public Unit[] units = new Unit[8]; 

    private int unitID; 

//constructors are here 

    public void print(){ 
    for (int i = 0; i < units.length; i++) 
    System.out.print(units[i].unitID); 
    } 

    public void add(Unit unit){ 
    mobs[numbofUnits] = unit; 
    numOfUnits++; 
    } 
} 

だから私は、メインクラスを介して、私はユニットアレイに新しいユニットのオブジェクトを追加さ​​れて起こるしたいものを。 MainクラスでunitToAdd.add(unitToAdd)という呼び出しを使用してそれらを追加したら、Mainの中からUnitのprint()メソッドを呼びたいと思います。

static修飾子を使用するかどうか、print()メソッド自体の変数を参照する方法(つまりthis.unitID、units [i] .unitIDなど)などです。

私にとって混乱しているのは、単純にprint()メソッドの性質です。 specificUnit.setID()を呼び出すことでその特定のオブジェクトの特定の変数が変更されていることを完全に理解しているので、setterとgetterは正常に動作しますが、print()などのメソッドをどのように動作させるかわかりません。

ありがとうございます!

+1

メインクラスのコードを投稿してください。 –

+3

ユニットにはユニットの配列がありますか?物事をクラスにグループ化する方法を混乱させるようです。 –

答えて

0

UnitのリストをUnitに実装しないでください。 ArrayListにユニットリストを格納し、次にmainメソッドにローカルなUnitListインスタンスを作成すると、UnitListクラスを作成して静的状態を回避できます。ユニット自体からユニットのセットを追跡するの懸念を分離し、デバッグし、ユニットテストすることは困難であるグローバル変更可能な状態を回避

public static void main(String[] argv) { 
    UnitList myUnitList = new UnitList(); 
    myUnitList.add(new Unit(...)); 
    myUnitList.print(); 
} 

あなたの質問にお答えするには、最小の変更点をいくつか説明してください。その理由は、staticである必要があります。

public class Unit{ 

    // static here since every unit does not need to have a number of units. 
    static int numOfUnits = 0; 
    // static here since every unit does not need to contain other units. 
    static Unit[] units = new Unit[8]; 

    // no static here since every unit does need its own ID. 
    private int unitID; 

    //constructors are here 

    // static here since every unit does not need to know how 
    // to print a particular 8 units. 
    public static void print(){ 
    for (int i = 0; i < numOfUnits; i++) 
     System.out.print(units[i].unitID); 
    } 

    // static here since every unit does not need to know how 
    // to add to a global list. 
    public static void add(Unit unit){ 
    mobs[numbofUnits] = unit; 
    numOfUnits++; 
    } 
} 
+0

複数のユニットが必要な場合はどうなるか考えてみてください。 –

+0

@Thorbjørn、私はそれを編集で取り上げました。 –

+0

"リスト"は、ユニットのすべてのインスタンスで引き続き共有されています。 –

2

簡単な答えは - print()を呼び出すために、あなたはUnitインスタンスを必要としています。 I 強くは、基本に戻ることをお勧めします - Learning the Java Language

+1

が合意しました - ここには大きなデザインの混乱があります –

0

は、ここで私がしたいものです。

  • は、ユニットからユニットアレイとnumOfUnitsを削除します。

  • 与えるユニットのように、そのユニットのIDを示していますtoStringメソッド:

    public String toString() { 
        return "" + unitID; 
    } 
    
  • はプログラムストアのArrayListでその単位を有します。 System.out.println(yourArrayList.toString())を使用して印刷してください。ものを追加するにはyourArrayList.add(aUnit);を使用してください。

  • ユニットからaddメソッドとprintメソッドを削除する必要はありません。