0

我的日志行说 animalclass 是 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

4 回答 4

3

您需要使用break;停止其他案例执行,因为没有中断它将执行正确的案例块语句以及“默认”代码块

于 2013-01-19T10:56:27.713 回答
1

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

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

如果您在外壳应该做的“事情”之后没有打破它,那么开关将无法正常工作。

于 2013-01-19T10:57:22.103 回答
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;
}
于 2013-01-19T10:57:52.037 回答
0

添加中断;每个 case 后面都有关键字,否则 switch 也会执行default语句,结果会出乎意料。

于 2013-01-19T11:15:24.137 回答