2011-09-13 27 views
0

我認爲那些是細菌。指定對象的設置值

我創建了3個對象是這樣的:

for (int j = 1; j < 4; j++) { 
     int parkingSlot= 1 + rd.nextInt(3); 
     AircraftCarrier ac= new AircraftCarrier (fc, j, parkingSlots, parkingSlots); 

    } 

基於類AircraftCarrier(它的構造函數):

public AircraftCarrier (FlightControl fc, int idC, int parkingSlots, int freeParkingSlots) { 
    this.kontrolaLotow = fc; 
    this.id = idC; 
    this.ps = parkingSlots; 
    this.fps = freeParkingSlots;   
} 

所以我有3個航空母艦,對不對?假設我需要更改id = 2的載體的freeParkingSLots值。我怎麼做?

+2

在哪裏你的航母對象保存在哪裏?在列表中?在字典中? – kroonwijk

+1

不通,大聲笑; P –

回答

4

您創建了三個實例,但由於您沒有維護對其中任何一個的引用,因此您不再擁有它們。他們已被送往垃圾收集。

您需要將每個實例存儲在某個集合中以供以後訪問。

List<AircraftCarrier> myList = new ArrayList<AircraftCarrier>(); 
for (int j = 1; j < 4; j++) { 
    int parkingSlot= 1 + rd.nextInt(3); 
    AircraftCarrier ac= new AircraftCarrier (fc, j, parkingSlots, parkingSlots); 
    myList.add(ac); 
} 
1

你必須到運營商存儲在數組中:

AircraftCarrier[] carriers = new AircreaftCarrier[3]; 
for (int j = 0; j < carriers.length; j++) { 
    int parkingSlot= 1 + rd.nextInt(3); 
    AircraftCarrier ac = new AircraftCarrier (fc, j + 1, parkingSlots, parkingSlots); 
    carriers[i] = ac; 
} 

現在你可以訪問它們:

carriers[1].fps = 6; // You wanted id=2. Since we count from zero in Java, use 1 
+0

我想,編碼後,少數啤酒將無法正常工作。我是一個新秀。 Ofc兩個答案都是對的。我必須接受一個。我會選擇名單,這對我來說更舒服。謝謝:) –

1

您創建的每個實例的,但無處救了他們。所以在循環之後,對象就「消失」了。 使用

List<AircraftCarrier> carriers = new ArrayList<AircraftCarrier>(); 
for (int j = 1; j < 4; j++) { 
    int parkingSlot = 1 + rd.nextInt(3); 
    AircraftCarrier ac = new AircraftCarrier (fc, j, parkingSlots, parkingSlots); 
    carriers.add(ac); 
} 

既然你分配的id 2到第二個元素,你可以使用carriers.get(1)get(0)會給你的第一個元素),現在訪問它。

1

必須「地方」運營商的地方,這樣以後可以訪問它們:

Map<Integer, AircraftCarrier> carriers = new HashMap<Integer, AircraftCarrier>(); 

for (int j = 1; j < 4; j++) { 
    int parkingSlot= 1 + rd.nextInt(3); 
    AircraftCarrier ac= new AircraftCarrier (fc, j, parkingSlots, parkingSlots); 
    carriers.put(j, ac); 
} 

/* update carrier with ID 2 */ 
carriers.get(2).fps = 1; 
+0

只有當AircraftCarrier類用''return id;''方法覆蓋''int hashCode()''方法時,纔會有效,在處理hashmaps時不要忘記這個細節。另外,通過契約,你必須重寫boolean equals(Object o)'! – f1sh

+0

@ f1sh:不,在這種情況下,鍵是一個整數已經覆蓋了兩個,它不是一個集合:-) – home

+0

你是如此令人難以置信的正確。出於某種奇怪的原因,我認爲AircraftCarrier類被用作地圖中的關鍵 - 請忽略我的第一個不正確的評論,每個人。 – f1sh