switch \ case无法按预期工作

时间:2013-01-19 10:55:06

标签: android switch-statement

我的日志行说动物类是4但不是去“案例4”它返回默认值。它适用于案例2。这怎么可能?提前谢谢。

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

4 个答案:

答案 0 :(得分:3)

你需要使用break;来阻止其他案例执行,因为没有中断它将执行正确的case块语句和“default”代码块

答案 1 :(得分:1)

尝试在所有情况下添加Break语句。

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

如果你在案件应该做的“事情”之后没有打破它,那么开关就不能正常工作。

答案 2 :(得分:1)

您忘记在break关键字前添加default关键字。 试试这个:

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

答案 3 :(得分:0)

在每种情况下添加 break; 关键字,否则switch也将执行默认语句,结果将是意外的。