Я запускаю следующий код в 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.
Благодарим за помощь.
Вы можете сохранить значение в переменной экземпляра класса и сделать его доступным через аксессуар.
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);
Чтобы решить вашу текущую проблему, я бы предложил, чтобы на каждом этаже сохранился инт, в каком этаже это.
Тем не менее, это кажется кодовым запахом для меня, поэтому я должен спросить, почему вам нужно это делать. Не могли бы вы реализовать его так, чтобы вы могли просто вызвать building.waitForElevator(3)? Другой рефакторинг будет состоять в том, чтобы вместо того, чтобы иметь один пассажирский массив ArrayList, имеет ценность для пассажира в классе Floor, и просто измените это при каждом вызове waitForElevator.
Если вы опубликуете свою полную проблему, я могу дать более полезные предложения, я угадываю здесь, основываясь на опубликованных вами фрагментах.