John Ashmore
John Ashmore

Reputation: 1045

switch\case not working as expected

My Log line says animalclass is 4 but instead of going to "case 4" it returns default. It works with case 2 though. How is this possible? Thanks in advance.

public int gettile(int animalclass) {
    Log.e("gettile", "animalclass = " + animalclass); 
    switch (animalclass) {
    case 1: // 
        tile=R.drawable.picnictile; 

        break;

    case 2: // 

        tile=R.drawable.picnictile; 

        break;

    case 3: // 

        tile=R.drawable.picnictile; 

    case 4: // 

        tile=R.drawable.picnictile; 

    case 5: // 

        tile=R.drawable.face; 


    default:
        Log.e("gettile", "failed!!!!!!!!!! = " + animalclass); 
        tile=R.drawable.rainbowtile;    

        break;
    }
    Log.e("gettile", "returning = " + tile); 
    return tile;
}

Upvotes: 0

Views: 1834

Answers (4)

Ajit
Ajit

Reputation: 967

Add break; keyword after each case, otherwise switch will execute default statement also and result will be unexpected.

Upvotes: 0

Lior
Lior

Reputation: 6051

You forgot to add a break keyword before the default keyword. Try this one:

public int gettile(int animalclass) {
    Log.e("gettile", "animalclass = " + animalclass); 
    switch (animalclass) {
    case 1: // 
        tile=R.drawable.picnictile; 

        break;

    case 2: // 

        tile=R.drawable.picnictile; 

        break;

    case 3: // 

        tile=R.drawable.picnictile; 
    break;
    case 4: // 

        tile=R.drawable.picnictile; 
    break;
    case 5: // 

        tile=R.drawable.face; 

    break;
    default:
        Log.e("gettile", "failed!!!!!!!!!! = " + animalclass); 
        tile=R.drawable.rainbowtile;    

        break;
    }
    Log.e("gettile", "returning = " + tile); 
    return tile;
}

Upvotes: 1

bemeyer
bemeyer

Reputation: 6221

Try adding the Break statemenet after all cases.

case 3: // 
tile=R.drawable.picnictile; 
break;
case 4: // 
tile=R.drawable.picnictile; 
break;
case 5: // 
tile=R.drawable.face; 
break;

If you dont break it after the "thing" the case should do, the switch does not work correct.

Upvotes: 1

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132972

you need to use break; to stop other case execution because without break it will execute the correct case block statements and also "default" code block

Upvotes: 3

Related Questions