我有这个方法,每个循环使用一个if语句
public static Apartment getApartment(String aNumber)
//for loop to iterate through the list of apartments
{
for (Apartment x : listOfApartments)
{
// Variable to hold the value of returned apartment
if (x.getApartmentNo().equalsIgnoreCase(aNumber))
{ Apartment chosen = x;
}
else
{JOptionPane.showMessageDialog(null, "Apartment not found");
}
}
return chosen;
}
我收到一个没有找到符号的错误。我想我已经把变量声明错了。 有帮助吗? 注意:这是一个采用String并返回Object Apartment的方法。
答案 0 :(得分:3)
你必须重写你的循环:在你完成循环之前,你不应该决定找不到公寓。您无需将值分配给临时变量 - 一旦找到公寓,立即返回。
您可以报告仅在完成循环时找不到公寓。
for (Apartment x : listOfApartments) {
// Variable to hold the value of returned apartment
if (x.getApartmentNo().equalsIgnoreCase(aNumber)) {
return x;
}
}
JOptionPane.showMessageDialog(null, "Apartment not found");
return null;
答案 1 :(得分:1)
如果条件“x.getApartmentNo()。equalsIgnoreCase(aNumber)”的计算结果为假,该怎么办?
公寓数据类型“已选择”未创建!
你怎么能归还一些尚未实例化的东西?
答案 2 :(得分:1)
这是一个范围问题,选择是在if语句的旁边创建的。
将其声明为外部并将其设置为null,然后如果条件为真,则函数将返回选中,如果不是则返回null。
public static Apartment getApartment(String aNumber)
//for loop to iterate through the list of apartments
{
Apartment chosen = null;
for (Apartment x : listOfApartments)
{
// Variable to hold the value of returned apartment
if (x.getApartmentNo().equalsIgnoreCase(aNumber))
{ chosen = x;
}
else
{JOptionPane.showMessageDialog(null, "Apartment not found");
}
}
return chosen;
}
答案 3 :(得分:0)
你是对的;你宣布选择在错误的地方。在循环之前声明它,但将它(那里)指定为null。这样,当你到达返回线时,它保证有一个值。
或者,假设只有一个公寓会匹配(或者你不关心哪个公寓),你可以简单地将return x;
放在if ... true的情况下。并且在循环之后返回null,假设循环完成。此外,由于您正在循环播放,不匹配的每个公寓都会显示“未找到”消息;你可能只希望在循环完成后显示它而没有找到公寓。
答案 4 :(得分:0)
代码中的变量chosen
被捕获在其创建的范围内,因此无法在{}
之外使用。此外,if语句的else分支在for循环的其余部分运行之前触发。
您不需要保存所选择的公寓,您可以立即将其退回,如下所示:
public static Apartment getApartment(String aNumber)
{
for (Apartment apartment : listOfApartments)
{
if (apartment.getApartmentNo().equalsIgnoreCase(aNumber))
return x;
}
JOptionPane.showMessageDialog(null, "Apartment not found");
return null;
}
答案 5 :(得分:0)
在for循环之前声明变量'selected',如下所示:
Apartment chosen = new Apartment();
一旦找到您要找的公寓,您也可以摆脱for循环。如果列表很大,可能会节省一些时间。
答案 6 :(得分:0)
编写方法的简单(和正确)方法是:
public static Apartment getApartment(String aNumber) {
for (Apartment x : listOfApartments)
if (x.getApartmentNo().equalsIgnoreCase(aNumber))
return x;
JOptionPane.showMessageDialog(null, "Apartment not found");
return null;
}
没有必要为应该立即返回的值声明局部变量。此外,消息对话框应该在循环结束后仅显示,因为只有这样我们才能确定没有公寓有搜索的号码。
关于问题中的代码,你是对的:变量chosen
应该在 for
循环之前声明,因此可以引用在循环之后。您声明它的方式,它只在if
块内可见。
答案 7 :(得分:0)
函数返回的变量chosen
超出了范围,在循环开始之前在方法的开头声明它。
答案 8 :(得分:0)
接受的答案是正确的,但我强烈建议避免多个退货声明。具有多个返回语句的代码更难管理。可能看起来不是什么大问题,但是当代码增长时,这可能成为一个真正的问题。
public static Apartment getApartment(String aNumber)
{
Apartment result = null;
for (Apartment apartment : listOfApartments)
{
if (apartment.getApartmentNo().equalsIgnoreCase(aNumber))
{
result = apartment;
break;
}
}
if (result == null)
{
JOptionPane.showMessageDialog(null, "Apartment not found");
}
return result;
}