shaike
shaike

Reputation: 59

Missing return statement inside switch

i have a method which returns a boolean value . Ive added return statement in every case of my switch statements and added default which also returns a value but still im getting the "Missing return statement" . Whats missing ?

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

Upvotes: 0

Views: 1120

Answers (4)

user6180719
user6180719

Reputation:


private boolean isDateValid ()
{  

    boolean flag = false;

    if ((_day>31) || (_day12) || (_month9999) || (_yearJANUARY)
                flag = true;   
            break;
        case 2:
            if ((_year % 400 == 0) || ((_year % 4 == 0) && (_year % 100 != 0)))
            {
            if (_day>FEBRUARY_LEAP)
                flag = true;
            }
            else if (_day>FEBRUARY)
                flag = true;
            break;
        case 3:
            if (_day>MARCH)
                flag = true;
            break;
        case 4:
            if (_day>APRIL)
                flag = true;
            break;
        case 5:
            if (_day>MAY)
                flag = true;
            break;  
        case 6:
            if (_day>JUNE)
                flag = true;
            break;    
        case 7:
            if (_day>JULY)
                flag = true;
            break;    
        case 8:
            if (_day>AUGUST)
                flag = true;
            break;    
        case 9:
            if (_day>SEPTEMBER)
                flag = true;
            break;    
        case 10:
            if (_day>OCTOBER)
                flag = true;
            break;    
        case 11:
            if (_day>NOVEMBER)
                flag = true;
            break;    
        case 12:
            if (_day>DECEMBER)
                flag = true;
            break; 
        default: return flag;
            }

     return flag;
    }

Upvotes: 0

vijay
vijay

Reputation: 926

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

Upvotes: 0

saeid rastak
saeid rastak

Reputation: 353

because you are using if in your case statement( if that if expression doesn't match method will not have any return value )

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

Upvotes: 0

Eran
Eran

Reputation: 393781

Consider this case :

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

You only return a value if the condition is true.

Instead, write

case 3:
    return _day>MARCH;

This will return true if the condition is met and false otherwise.

The same applies to all you case clauses.

Upvotes: 4

Related Questions