【发布时间】:2023-03-04 10:49:01
【问题描述】:
所以,有一个类Hotel,它包含 20 个房间,以矩阵 4x5 的形式(4 层,每层 5 个房间)。 Room 类具有以下属性:
floorNumber(int),
roomNumber(int),
numberOfBeds(int),
occupation(boolean)
etc.
对于occupation,true 表示忙,false 表示空闲。
我必须在酒店中实施的一种方法是预订房间
reserve(int floorNumber, int roomNumber)
这个方法应该检查职业是真还是假。
如果是真的,那么预订失败,如果是假的,我应该设置职业为真,方法
setOccupation(boolean t).
另外,方法reserve 返回布尔值(真或假),取决于预订是否成功。
您猜想,在这种方法中,一个变量的范围存在问题。
就是这样:
public boolean reserve(int floorNumber, int roomNumber){
boolean flag = false;
for ( int i = 0; i < 5; i++){
if(rooms[floorNumber][i].getRoomNumber() == roomNumber){//every element in matrix rooms has this property: rooms[floorNumber][some_number_from_1_to_5]
if (rooms[floorNumber][i].getOccupancy() == false){
rooms[floorNumber][i].setOccupancy(true);
flag = true;
}
else
flag = false;
}
}
return flag;
}
问题是,当我(在第一行)将 flag 设置为 true 时,函数返回 true,而当我将 flag 设置为 false 时,函数返回 false。
我必须在第一行为标志分配 some 值的原因是因为编译器显示:
Error: variable flag might not have been initialized
所以,问题在于方法似乎永远不会使用 for 循环执行代码。
我知道在循环中定义的变量在循环之外不存在,但是在循环之外定义的变量应该在循环中改变它们的值。
就像这里的这个问题一样:
Java - Access variable inside and outside of for-loop
【问题讨论】:
-
您的代码无法编译。
boolean flag false;无效。修复该语句,然后重新编译。 -
对不起,我编辑了queston,它现在可以编译了。原来是
boolean flag = false; -
你为什么要在这里循环?它是一个 4 x 5 阵列。您知道楼层和房间号(例如,2、3)。直接从 rooms 数组中获取房间(例如 Room room = rooms[2][3])。
-
@RealSkeptic 你是对的。我误读了这个问题。对不起。
-
@LazyLady 使用您的调试器,并逐步执行您的代码。如果它从不改变标志,有一个简单的解释:表达式
rooms[floorNumber][i].getRoomNumber() == roomNumber永远不会为真。