gpt4 book ai didi

java - for 循环外变量作用域的问题

转载 作者:行者123 更新时间:2023-12-02 03:45:00 36 4
gpt4 key购买 nike

因此,有一个Hotel类,它包含 20 个房间,呈 4x5 矩阵形式(4 层楼,每层 5 个房间)。 Room 类具有以下属性:

floorNumber(int),  
roomNumber(int),
numberOfBeds(int),
occupation(boolean)
etc.

对于职业,true表示忙碌,false表示空闲。

我必须在酒店实现的方法之一是预订房间

reserve(int floorNumber, int roomNumber) 

此方法应检查职业是真还是假。
如果为 true,则预订失败,如果为 false,我应该将占用设置为 true,方法为

setOccupation(boolean t).  

此外,方法 reserve 返回 boolean 值(true 或 false),具体取决于预订是否成功。您猜想,在该方法中,一个变量的范围存在问题。所以就是这样:

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;
}

问题是,当我将(第一行)标志设置为 true 时,函数返回 true,而当我将 flag 设置为 false 时,函数返回 false。
我必须为第一行中的标志分配一些值的原因是因为编译器显示:

Error: variable flag might not have been initialized

所以,问题是该方法似乎永远不会使用 for 循环执行代码。
我知道循环中定义的变量在循环外部不存在,但是外部定义的变量应该在循环中更改其值。就像这个问题一样: Java - Access variable inside and outside of for-loop

最佳答案

有一种更简单的方法可以完成您想做的事情。你根本不需要 boolean 标志;您可以在成功时立即返回 true,或者在整个循环执行完毕而没有找到房间时返回 false。

public boolean reserve(int floorNumber, int roomNumber){
for (int i = 0; i < 5; i++) {
//every element in matrix rooms has this property:
//rooms[floorNumber][some_number_from_1_to_5]
if (rooms[floorNumber][i].getRoomNumber() == roomNumber){
if (rooms[floorNumber][i].getOccupancy() == false){
rooms[floorNumber][i].setOccupancy(true);
return true;
}
}
}
return false;
}
<小时/>

但是,如果您坚持应用使用标志的原始方法,那么:首先给它一个 false 值(以防没有空间成功)。当我们找到一个无人居住的房间(成功)时,将其设置为true。如果我们发现有人占用的房间,不要触摸标志值

public boolean reserve(int floorNumber, int roomNumber){
boolean flag = false;
for (int i = 0; i < 5; i++) {
//every element in matrix rooms has this property:
//rooms[floorNumber][some_number_from_1_to_5]
if (rooms[floorNumber][i].getRoomNumber() == roomNumber){
if (rooms[floorNumber][i].getOccupancy() == false){
rooms[floorNumber][i].setOccupancy(true);
flag = true;
} // else DO NOTHING
}
}
return flag;
}

关于java - for 循环外变量作用域的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389433/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com