Условие if в методе set не работает - PullRequest
0 голосов
/ 16 февраля 2019

Таким образом, на каком этаже лифт должен быть прочитан и изменен, но только в пределах допустимого диапазона только для того дома, в котором установлен лифт. Я пытаюсь получить условие «Если», работающее в поискахлогическое истинное значение из метода "validFloor".

Исходя из моих начальных знаний Java, я предполагаю, что вставка условия "If" в метод set является правильной попыткой?

private int currentFloor = 0;
private int numberOfFloors;
private boolean validFloor = false;

public Elevator(int numberOfFloors) {
    this.numberOfFloors = numberOfFloors;
}

//Sets the allowed number of floors (0 to 100)
public void allowedNumberOfFloors() {
    if (numberOfFloors < 2) {
        numberOfFloors = 2;
    } else if (numberOfFloors > 100) {
        numberOfFloors = 100;
    }
}

//Checks validity of the elevator floor in relation to total floors.
public void validFloor() {
    if (currentFloor > numberOfFloors && currentFloor < 0) {
        this.validFloor = false;
    }
}

//Checks whether the specified floor is in reasonable range.
public void setFloor(int currentFloor) {
    if (validFloor) {
        this.currentFloor = currentFloor;
    }
}

public int getFloor() {
    return currentFloor;
}

public String toString() {
    return "Number of floors: " + numberOfFloors + "\nCurrent floor: " + currentFloor;
}

Например, если вы пытаетесь переместить лифт на этаж 74 в доме, который имеет только 5 этажей, он не должен работать.Я хочу, чтобы шипение начиналось с нижнего этажа 0, поэтому значение 0 в переменной класса "currentFloor".

Условие If в методе validFloor, похоже, вообще не распознается.Вместо этого все, что имеет значение, это логическое значение, которое я помещаю в переменную класса validFloor.

1 Ответ

0 голосов
/ 16 февраля 2019

Вы никогда не вызываете метод validFloor(), поэтому значение validFloor никогда не изменяется.Кроме того, ваш код никогда не устанавливает для validFloor значение true, поэтому не имеет значения, если вы вызвали validFloor(), потому что он может установить только validFloor в false или оставить его на начальном значении * 1007.*.

«Правильный» способ сделать что-то вроде этого:

public boolean isValidFloor(floor) {
  // It seems weird to me that 0 is a valid floor.  Is that correct?
  // If floors are zero-indexed, the top floor should actually be numberOfFloors-1.
  return floor >= 0 && floor <= this.numberOfFloors;
}

public void setFloor(int newFloor) {
    if (isValidFloor(newFloor)) {
        this.currentFloor = newFloor;
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...