индекс массива объектов Java

1

Я запускаю следующий код в java и задаю несколько вопросов.

Я вызываю следующую строку в классе Test:

building.floor(3).waitForElevator();

Класс My Building имеет следующий метод, который возвращает объект пола из массива (этажа) для данного floorNumber.

ArrayList<Floor> floors = new ArrayList<Floor>();

public Floor floor(int floorNumber) {
    return floors.get(floorNumber);
}

У моего класса Floor есть метод waitForElevator(). В моем классе Floor у меня также есть массив длиной 7, называемый travelWaiting. Всякий раз, когда вызывается waitForElevator(), я хотел бы получить доступ к правильному эталонному номеру в массиве incomingWaiting и изменить его значение.

То, с чем я борюсь, - это когда вызывается building.floor(3).waitForElevator(), как мне получить доступ к индексу (3 в этом примере) из класса Floor.

Благодарим за помощь.

Теги:
object

2 ответа

2
Лучший ответ

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

public class Building{
    private int floor = 0;

    private ArrayList<Floor> floors = new ArrayList<Floor>();

    public Buliding(){
        Floor floor1 = new Floor(this);
        this.floors.add(floor1);
    }

    public Floor floor(int floorNumber) {
        this.floor = floorNumber;
        return floors.get(floorNumber);
    }

    public int getFloor(){
        return floor;
    }
}

Если вы добавите конструктор для Floor который принимает экземпляр здания и сохраняет его как переменную экземпляра, вы можете получить доступ к полу в любое время.

public class Floor{
   private Building building;

   public Floor(Building building){
       this.building = building;
   }

   public void waitForElevator(){
       int floor = this.building.getFloor();
   }
}

Другое решение

Просто передайте int для waitForElevator в качестве аргумента.

public class Floor{

   public void waitForElevator(int floor){
       System.out.println(floor);
   }
}

//Usage
building.floor(3).waitForElevator(3);

Примечание. Это решение не так велико, потому что клиент может ссылаться как building.floor(3).waitForElevator(4);

  • 0
    первое решение выручает здорово ... спасибо!
0

Чтобы решить вашу текущую проблему, я бы предложил, чтобы на каждом этаже сохранился инт, в каком этаже это.

Тем не менее, это кажется кодовым запахом для меня, поэтому я должен спросить, почему вам нужно это делать. Не могли бы вы реализовать его так, чтобы вы могли просто вызвать building.waitForElevator(3)? Другой рефакторинг будет состоять в том, чтобы вместо того, чтобы иметь один пассажирский массив ArrayList, имеет ценность для пассажира в классе Floor, и просто измените это при каждом вызове waitForElevator.

Если вы опубликуете свою полную проблему, я могу дать более полезные предложения, я угадываю здесь, основываясь на опубликованных вами фрагментах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню