Android R.java ID开关始终提供默认值

时间:2012-02-11 14:47:54

标签: java android switch-statement

我正在使用Java switch语句根据调用它的按钮的id为变量分配不同的值。

问题是它总是评估细节。

我认为错误可能在于我如何获得Id(R.java位),但我做了一些互联网研究,并且找不到“正确”的方法。

这是我的代码(-9923就在那里,所以很明显它是否无效)

public void rootMe(View v){

 /* I got rid of some code here so it was shorter */

    int mult = -99;

    int buttonId = v.getId();

    switch(buttonId)
    {
    case R.id.root2:
        mult = 1/2;
    case R.id.root3:
        mult = 1/3;
    case R.id.root4:
        mult = 1/4;
    case R.id.root5:
        mult = 1/5;
    case R.id.root6:
        mult = 1/6;
    default:
        mult = 23;
    }

3 个答案:

答案 0 :(得分:4)

使用swicth构造,一旦达到case,即使还有另一个case语句,也会执行case以下的代码。< / p>

如果您希望执行停止(退出switch构造),则必须使用break语句;最有可能在每个case块的末尾:

switch(buttonId)
{
    case R.id.root2:
        mult = 1/2;
        break;
    case R.id.root3:
        mult = 1/3;
        break;
    case R.id.root4:
        mult = 1/4;
        break;
    case R.id.root5:
        mult = 1/5;
        break;
    case R.id.root6:
        mult = 1/6;
        break;
    default:
        mult = 23;
        break;
}

这样,当执行与case语句对应的代码时,它将不再执行与以下case语句对应的代码,并退出switch构造


请注意,这不是特定于android的:它只是switch语句在JAVA中的工作方式;例如:The switch Statement

答案 1 :(得分:1)

你没有break。您必须在每个案例后放置一个break语句,以便它不会继续执行和测试案例。 。 。

switch(buttonId)
    {
    case R.id.root2:
        mult = 1/2;
        break;
    case R.id.root3:
        mult = 1/3;
        break;
    case R.id.root4:
        mult = 1/4;
        break;
    case R.id.root5:
        mult = 1/5;
        break;
    case R.id.root6:
        mult = 1/6;
        break;
    default:
        mult = 23;
    }

在此处阅读更多内容:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

答案 2 :(得分:1)

这里有一篇很好的文章你可能应该看一下 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html