2012-03-04 20 views
1

最後にstaticメソッドでアクセス可能なroomsというオブジェクト配列をretrieveRoom()とすることができます。私は公共の静的な部屋を試しました[] =新しい部屋[3]。しかし、私はちょうどそれからエラーを取得しています。どんな助けもありがとうございます。このインスタンス変数にアクセスするJava

public class MasterControlPanel { 
    public static Rooms[] rooms = new Rooms[4]; 
    public static void main(String[] args) { 
    ... 
    } 
} 

ような宣言セクションにこれはあなたにrooms静的メンバを定義する

あなた main()方法のうち
public class MasterControlPanel{ 

    public static void main(String[] args){ 

    Rooms rooms[] = new Rooms[3]; 

    rooms[0] = new Rooms("Room U", 1, 4, 4); 
    rooms[1] = new Rooms("Room U", 2, 4, 4); 
    rooms[2] = new Rooms("Connector X", 3, 2, 4); 
    rooms[3] = new Rooms("Connector U", 4, 2, 4); 

    for(int x = 0; x <= rooms.length; x++){ 
     rooms[x].createLights(); 
     rooms[x].createWalls(); 
    } 
    } 

    public static Object retrieveRoom(int connectedRoom){ 

    connectedRoom -= 1; 
    return rooms[connectedRoom]; 
    } 

}

答えて

3

移動

public static Rooms[] rooms = new Rooms[4]; 

MasterControlPanelクラス。

  1. 静的メンバーがいる限りそのClassが存在するとしてアクセスすることができます:ここでは

    は、他のいくつかのヒントがあります。ただし、インスタンスメンバー(そのクラスのインスタンスに属する変数)にアクセスするには、そのクラスのインスタンスが必要です。

  2. Rooms[] rooms = new Rooms[4];を使用してください。配列の括弧がType部分に移動することに注意してください。これにより、今後の混乱を防ぐことができます。 "名前部屋「」の部屋の配列を定義しましょう。しかしこれは良いことではありません。
  3. 要素を追加していますが、という配列を定義しています。これにより、ArrayIndexOutOfBounds例外が発生します。
  4. privateのメンバーにEncapsulationを達成させる必要があります。 publicまたはprotectedメソッドを提供して、これらのメンバーからあなたのクラスのメンバーからprivateメンバーを取得することができます。
  5. 配列にn個の要素が含まれている場合、その配列にできる連続反復の最大回数はnです。つまり、forループでは、ループの状態が最後の反復に対してn-1であることを確認してください。サイズが4の配列に4番目の要素がないことを覚えておいてください。ここ

変数は静的メソッドによってアクセスできるように静的である必要があるコード

public class MasterControlPanel { 
    public static Room[] rooms = new Room[4]; 

    public static void main(String[] args) { 

     rooms[0] = new Room("Room U", 1, 4, 4); 
     rooms[1] = new Room("Room U", 2, 4, 4); 
     rooms[2] = new Room("Connector X", 3, 2, 4); 
     rooms[3] = new Room("Connector U", 4, 2, 4); 

     for (int x = 0; x <= rooms.length-1; x++) { 
      rooms[x].createLights(); 
      rooms[x].createWalls(); 
     } 
    } 

    public static Room retrieveRoom(int connectedRoom) { 
     connectedRoom -= 1; 
     return rooms[connectedRoom]; 
    } 

} 

class Room { 
    // These are instance members for Room class 
    private String roomString; 
    private int roomInteger1, roomInteger2, roomInteger3; 

    public Room(String string, int integer1, int integer2, int integer3) { 
     // This is the constructor for Room object 
     this.roomString = string; 
     this.roomInteger1 = integer1; 
     this.roomInteger2 = integer2; 
     this.roomInteger3 = integer3; 
    } 

    public void createLights() { 
     // This method creates lights 
    } 

    public void createWalls() { 
     // This method creates walls 
    } 

    // These are Getters and Setters for Room members 
    public String getRoomString() { 
     return roomString; 
    } 

    public void setRoomString(String roomString) { 
     this.roomString = roomString; 
    } 

    public int getRoomInteger1() { 
     return roomInteger1; 
    } 

    public void setRoomInteger1(int roomInteger1) { 
     this.roomInteger1 = roomInteger1; 
    } 

    public int getRoomInteger2() { 
     return roomInteger2; 
    } 

    public void setRoomInteger2(int roomInteger2) { 
     this.roomInteger2 = roomInteger2; 
    } 

    public int getRoomInteger3() { 
     return roomInteger3; 
    } 

    public void setRoomInteger3(int roomInteger3) { 
     this.roomInteger3 = roomInteger3; 
    } 
} 
+1

に従います。 –

+0

メンバプロパティはインスタンスなしの静的メソッドでは使用できません。あなたの編集はこれに対処しません - あなたのコードはコンパイルされません。 –

+0

答えに古いコードと新しいコードのマイクが残っていますが、今はあります。 –

関連する問題