2011-09-13 20 views
0

私はそれらがbacicsであると仮定します。指定されたオブジェクトの設定値

私はこのような3つのオブジェクトを作成しました:

クラスAircraftCarrier(それのコンストラクター)に基づき
for (int j = 1; j < 4; j++) { 
     int parkingSlot= 1 + rd.nextInt(3); 
     AircraftCarrier ac= new AircraftCarrier (fc, j, parkingSlots, parkingSlots); 

    } 

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

あなたは3つのインスタンスを作成しましたが、いずれかのインスタンスへの参照を保持していないため、インスタンスは作成されません。彼らはガベージコレクションに送られました。

後でアクセスできるように、各インスタンスをコレクションに保存する必要があります。

あなたは配列にキャリアを格納する必要が
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

私は、いくつかのビールの後でコーディングがうまくいかないと思う。私はそのような新人です。どちらの答えも正しいです。私は1つを受け入れる必要があります。私はリストを選ぶつもりですが、それは私にとってもっと快適です。とにかくありがとう:) –

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); 
} 

2番目の要素にID 2を割り当てられているので、あなたは今(get(0)はあなたの最初の要素を与えるだろう)carriers.get(1)を使用してアクセスすることができます。

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() ''メソッドをオーバーライドし、ハッシュマップを扱うときに細部を忘れることがない場合にのみ機能します。また、契約によって、 '' boolean equals(Object o) ''をオーバーライドする必要があります! – f1sh

+0

@ f1sh:いいえ、この場合、キーは既に両方をオーバーライドしている整数です。それはセットではありません:-) – home

+0

あなたはとても信じられないほど正しいです。私は、AircraftCarrierクラスがマップのキーとして使用されていると思っていました。最初の間違ったコメントを無視してください。 – f1sh

関連する問題