在开关

时间:2016-12-11 08:44:10

标签: java

我有一个返回布尔值的方法。我已经在我的switch语句的每个情况下添加了return语句,并添加了default,它也返回一个值,但仍然得到了“Missing return statement”。 什么不见​​了?

private boolean isDateValid ()
{  
    if ((_day>31) || (_day<=0))                     
    {
        return true;
    }
    if ((_month>12) || (_month<=0))  
    {
        return true;
    }
    if ((_year>9999) || (_year<1000))
    {
        return true;
    }
    switch (_month)
    {
        case 1:
            if (_day>JANUARY)
                return true;   
            break;
        case 2:
            if ((_year % 400 == 0) || ((_year % 4 == 0) && (_year % 100 != 0)))
            {
            if (_day>FEBRUARY_LEAP)
                return true;
            }
            else if (_day>FEBRUARY)
                return true;
            break;
        case 3:
            if (_day>MARCH)
                return true;
            break;
        case 4:
            if (_day>APRIL)
                return true;
            break;
        case 5:
            if (_day>MAY)
                return true;
            break;  
        case 6:
            if (_day>JUNE)
                return true;
            break;    
        case 7:
            if (_day>JULY)
                return true;
            break;    
        case 8:
            if (_day>AUGUST)
                return true;
            break;    
        case 9:
            if (_day>SEPTEMBER)
                return true;
            break;    
        case 10:
            if (_day>OCTOBER)
                return true;
            break;    
        case 11:
            if (_day>NOVEMBER)
                return true;
            break;    
        case 12:
            if (_day>DECEMBER)
                return true;
            break; 
        default: return false;
            }
    }

4 个答案:

答案 0 :(得分:4)

考虑这种情况:

case 3:
    if (_day>MARCH)
        return true;
    break;

如果条件为真,则只返回一个值。

相反,写一下

case 3:
    return _day>MARCH;

如果满足条件,则返回true,否则返回false。

这同样适用于所有案例条款。

答案 1 :(得分:0)

因为你在案例陈述中使用 if (如果表达式不匹配,那么方法将没有任何返回值)

案例3:             if(_day&gt; MARCH)                 返回true;             打破;

答案 2 :(得分:0)

Add `return false;` above the last bracket `}` and replace each `break;` statement 

private boolean isDateValid ()
{  
    if ((_day>31) || (_day<=0))                     
    {
        return true;
    }
    if ((_month>12) || (_month<=0))  
    {
        return true;
    }
    if ((_year>9999) || (_year<1000))
    {
        return true;
    }
    switch (_month)
    {
        case 1:
            if (_day>JANUARY)
                return true;   
return false;

        case 2:
            if ((_year % 400 == 0) || ((_year % 4 == 0) && (_year % 100 != 0)))
            {
            if (_day>FEBRUARY_LEAP)
                return true;
            }
            else if (_day>FEBRUARY)
                return true;
return false;

        case 3:
            if (_day>MARCH)
                return true;
return false;

        case 4:
            if (_day>APRIL)
                return true;
return false;

        case 5:
            if (_day>MAY)
                return true;
return false;

        case 6:
            if (_day>JUNE)
                return true;
return false;

        case 7:
            if (_day>JULY)
                return true;
return false;

        case 8:
            if (_day>AUGUST)
                return true;
return false;

        case 9:
            if (_day>SEPTEMBER)
                return true;
return false;

        case 10:
            if (_day>OCTOBER)
                return true;
return false;

        case 11:
            if (_day>NOVEMBER)
                return true;
return false;

        case 12:
            if (_day>DECEMBER)
                return true;
return false;

        default: return false;
            }
return false;
    }

答案 3 :(得分:0)

df = pandas.DataFrame({
    "Grade": [1, 2, 1, 1, 2, 1, 2, 2, 1],
    "Major": ["Science", "Art", "Engineering", "Science", "Science", "Science", "Science", "Engineering", "Engineering"]})