-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 )
                    {
                        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的其中一个时,循环永远不会中断并继续直到完成,并且我的变量结果不采用真实值。我认为这可能很愚蠢,但我看不出有什么不对。

4

2 回答 2

8

您将不得不将您的|&ifs 中加倍。

||手段或
&&手段和

|并且&是逐位运算符。

为了澄清我的回答,您的break条件对我来说似乎很好,我在代码中看到的唯一真正的问题是我提到的操作员。

于 2013-05-08T20:33:22.943 回答
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;
}
于 2013-05-08T20:34:33.867 回答