因此,应该能够读取和更改电梯所在的楼层,但只能在电梯安装所在房屋的允许范围内进行。我试图使“ If”条件正常工作,寻找一个方法“ validFloor”中的布尔值真值。
基于我对Java的初学知识,我认为在set-method中放置一个“ If”条件是正确的尝试吗?
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;
}
例如,如果您尝试将电梯移动到只有5层的房屋中的74层,则该电梯将不起作用。我希望嘶嘶声从底层0开始,因此类变量“ currentFloor”中的值为0。
似乎根本无法识别“ validFloor”方法中的If条件。相反,重要的是我在类变量validFloor上输入的布尔值。
答案 0 :(得分:1)
您永远不会调用validFloor()
方法,因此validFloor
的值不会改变。另外,您的代码永远不会在任何地方将validFloor
设置为true,因此即使您调用validFloor()
也没关系,因为它只能将validFloor
设置为false
或离开初始值为false
。
做这种事情的“正确”方法是:
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
变量。我们只需要检查一次地板是否有效就可以了,而无需保存结果。