我有以下代码:
private boolean result = false;
public boolean checkHourExist(int hourfrom,
int minutefrom,
int hourto,
int minuteto,
int day,
int templateId)
{
List<templates> t = getAllTemplatesWithDays();
for (templates tem : t)
{
if(day == -1 | tem.Temp_DayId == day)
{
if(tem.Temp_HourFrom >= hourfrom & tem.Temp_HourTo == hourto )
{
if(tem.Temp_HourFrom == hourfrom)
{
if(tem.Temp_MinFrom == minutefrom )
{
result= true;
break;
}
else if(minutefrom < tem.Temp_MinFrom & minuteto >= tem.Temp_MinTo )
{
result = true;
break;
}
}
else
{
result = true;
break;
}
}
else if(tem.Temp_HourFrom == hourfrom & tem.Temp_HourTo < hourto )
{
result = true;
break;
}
else if(tem.Temp_HourFrom > hourfrom & tem.Temp_HourTo < hourto )
{
result = true;
break;
}
}
}
return result;
}
当代码转到我的if
之一时,循环永远不会中断并继续直到完成,并且我的变量结果不会采用真值。我认为这可能是愚蠢的,但我看不出有什么不妥。
答案 0 :(得分:8)
您必须将|
中的&
和if
加倍。
||
表示或
&&
表示和
|
和&
是双向运营商。
为了澄清我的回答,你的break
条件对我来说似乎很好,我在代码中看到的唯一真正问题是我提到的运算符。
答案 1 :(得分:2)
如何返回而不是破坏。从我的角度来看,这使它更具可读性
private boolean result = false;
public boolean checkHourExist(int hourfrom,int minutefrom,int hourto,int minuteto,int day,int templateId)
{
List<templates> t = getAllTemplatesWithDays();
for (templates tem : t)
{
if(day == -1 | tem.Temp_DayId == day)
{
if(tem.Temp_HourFrom >= hourfrom & tem.Temp_HourTo == hourto )
{
if(tem.Temp_HourFrom == hourfrom)
{
if(tem.Temp_MinFrom == minutefrom )
{
return true;
}
else if(minutefrom < tem.Temp_MinFrom & minuteto >= tem.Temp_MinTo ) {
return true;
}
} else
{
return true;
}
}
else if(tem.Temp_HourFrom == hourfrom & tem.Temp_HourTo < hourto ) {
return true;
}
else if(tem.Temp_HourFrom > hourfrom & tem.Temp_HourTo < hourto ) {
return true;
}
}
}
return false;
}