for循环中if语句的返回值

时间:2012-04-25 04:13:02

标签: java if-statement foreach return

我有这个方法,每个循环使用一个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的方法。

9 个答案:

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