2012-03-05 62 views
-2

嘿,如何从另一个类访问数组列表?如在调用ArrayList中的对象方法,但从MasterControlPanel类?任何帮助是极大的赞赏。因为get(0)似乎不起作用。从另一个类访问数组列表

//example 

public class MasterControlPanel{ 
    public static Building building = new Building(); 

    public static void main(String[] args) { 
     building.rooms.get(0).*whatever* 
    } 
} 

public class Building 
{ 
    public static Rooms rooms[] = new Rooms[4]; 
    private float outsideTemp; 
    ArrayList rooms = new ArrayList(); 

    rooms.add(*new instance*); 
    rooms.add(*new instance*); 

    public Building() { 
    } 

}

+0

这不会编译(甚至在您更换'*新的实例*'位),因为'rooms.add()'调用是不是在一个方法,构造函数或初始化器。还有一个数组和一个名为'rooms'的ArrayList。你可以编辑它使其成为[SSCCE](http://sscce.org)? – DNA 2012-03-05 22:37:47

+0

不工作是什么意思?你能发布实际的代码吗? '建筑物'中有两个同名的变量:'房间'。 – hmjd 2012-03-05 22:38:45

+0

这真的是你的代码?你真的有一个与实例变量名称相同的静态变量?什么不工作?显示一些错误,也许? – 2012-03-05 22:39:35

回答

3

添加一个getter:

public class Building{ 

public static Rooms roomArray[] = new Rooms[4]; 
private float outsideTemp; 
List<Room> rooms; 

public Building(float temp){ 
    rooms = new ArrayList<Room>(); 
    rooms.add(new Room()); 
    rooms.add(new Room()); 
    outsideTemp = temp; 
} 

public List<Rooms> getRoomList() { 
    return this.rooms; 
} 
} 

然后你就可以做:

public class MasterControlPanel{ 
    public static Building building = new Building(); 

    public static void main(String[] args){ 
    building.getRoomList.get(0).*whatever* 

    } 
} 

另外:你为什么不定义List s的类型?另外,请注意,我已将代码移到此类的构造函数中,并修复了名称冲突。另外,为什么static数组?需要考虑的事情...

最后注意:将float添加到构造函数中以确保它已初始化。

+0

非常感谢! :) – user969729 2012-03-05 23:05:04

0

比方说,你的ArrayList实例是私有的,你不希望它是静态的(你呢?)。首先你创建一个getter方法,如:

public ArrayList getRooms() 

{ 回房间; }

在其他类现在,您创建一个对象:

Building b=new Building(); 

和访问名单:

b.getRooms(); 
0

如果你的main()方法确实是你的主要方法,你可能还没有初始化你的ArrayList。将这些rooms.add(new Thing())调用放在您试图访问列表之前知道他们将被调用的地方。

public class Building { 
    public final ArrayList rooms = new ArrayList(); 

    public Building(){ 
     rooms.add(new Ballroom()); 
     rooms.add(new Library()); 
    } 
}