Установка значения для указанного объекта - PullRequest
0 голосов
/ 13 сентября 2011

Я предполагаю, что это бактерии.

Я создал 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 авианосца, верно? Предположим, мне нужно изменить значение freeParkingSLots для носителя с id = 2. Как мне это сделать?

Ответы [ 4 ]

4 голосов
/ 13 сентября 2011

Вы создали три экземпляра, но, поскольку вы не сохранили ссылку ни на один из них, у вас их больше нет. Их отправили на сборку мусора.

Вам нужно хранить каждый экземпляр в некоторой коллекции для последующего доступа.

 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 голос
/ 13 сентября 2011

Вы должны «разместить» носителей где-нибудь, чтобы иметь к ним доступ позже:

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;
1 голос
/ 13 сентября 2011

Вы создали каждый из экземпляров, но нигде не сохранили. Итак, после цикла объекты «ушли». Используйте

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 второму элементу, теперь вы можете получить к нему доступ, используя carriers.get(1) (get(0) даст вам первый элемент).

1 голос
/ 13 сентября 2011

Вы должны хранить носителей в массиве:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...