MooMoo
MooMoo

Reputation: 39

The method must return a type int

public int computeStyle(String season) {
    if(season.equals("summer")){
        if (this.style.equals("toque")){
            return 8;
        }
        if (this.style.equals("sun visor")){
            return 1;
        }
        if (this.style.equals("fedora")){
            return 6;
        }
    }
    else if(season.equals("winter")){
        if (this.style.equals("toque")){
            return 1;
        }
        if (this.style.equals("sun visor")){
            return 8;
        }
        if (this.style.equals("fedora")){
            return 7;
        }
    }
    else return 5;
}

Why do I keep getting the error that the method must return type int. What is wrong with this function? It should return an int in every possible scenario right?

Upvotes: 4

Views: 269

Answers (2)

Soumitri Pattnaik
Soumitri Pattnaik

Reputation: 3556

If your return type is int, any how your method must return an int.

In this case inside your outer if else, you still have if blocks, means if, inside the outer if else, if non if the condition is satisfied, then it ll return nothing.

In this case, you should always add a return statement at the end.

Like this :

public int computeStyle(String season) {
    if(season.equals("summer")){
        if (this.style.equals("toque")){
            return 8;
        }
        if (this.style.equals("sun visor")){
            return 1;
        }
        if (this.style.equals("fedora")){
            return 6;
        }
    }
    else if(season.equals("winter")){
        if (this.style.equals("toque")){
            return 1;
        }
        if (this.style.equals("sun visor")){
            return 8;
        }
        if (this.style.equals("fedora")){
            return 7;
        }
    }
    else return 5;

   // If everything fails, then it ll return 0 at least
   return 0;
}

Upvotes: 0

Luiggi Mendoza
Luiggi Mendoza

Reputation: 85799

There are two paths that are not covered:

public int computeStyle(String season) {
    if(season.equals("summer")){
        if (this.style.equals("toque")){
            return 8;
        }
        if (this.style.equals("sun visor")){
            return 1;
        }
        if (this.style.equals("fedora")){
            return 6;
        }
        //here
    }
    else if(season.equals("winter")){
        if (this.style.equals("toque")){
            return 1;
        }
        if (this.style.equals("sun visor")){
            return 8;
        }
        if (this.style.equals("fedora")){
            return 7;
        }
        //here
    }
    else return 5;
}

Solution: declare a variable with the defaut return value and assign the value properly:

public int computeStyle(String season) {
    int result = 5;
    if(season.equals("summer")){
        if (this.style.equals("toque")){
            result = 8;
        }
        if (this.style.equals("sun visor")){
            result = 1;
        }
        if (this.style.equals("fedora")){
            result = 6;
        }
    }
    else if(season.equals("winter")){
        if (this.style.equals("toque")){
            result = 1;
        }
        if (this.style.equals("sun visor")){
            result = 8;
        }
        if (this.style.equals("fedora")){
            result = 7;
        }
    }
    return result;
}

Upvotes: 6

Related Questions