如果-否则工作,则不切换

我正在制作一个应用程序,该应用程序具有带有文本的图像网格,每个图像都打开不同的活动。它工作正常,但只是为了设计目的,我想用(我认为我可以做到)替换我的,但它不起作用。现在,我在每个图像上设置标签的工作代码是:if-else statementsswitch statements

if(position == 0)
        textView.setText(R.string.zero);
    else if(position == 1)
        textView.setText(R.string.one);
    else if(position == 2)
        textView.setText(R.string.two);
    else if(position == 3)
        textView.setText(R.string.three);
    else if(position == 4)
        textView.setText(R.string.four);
    else if(position == 5)
        textView.setText(R.string.five);
ect....

我想使用:

switch(position)
case 0:
   textView.setText(R.string.zero);    
case 1:
   textView.setText(R.string.one);
case 2:
   textView.setText(R.string.two);    
case 3:
   textView.setText(R.string.three);
case 4:
   textView.setText(R.string.four);    

但是当我这样做时,这个标签是我定义的最后一个标签(在我的例子中,它将是“四”)。我为每个对象也有一个类似的代码,用变量开始一个不同的,但是这样做恰恰相反,并使每个意图都等于第一个意图。是我的语法错误还是这不适用于我的情况?intentposition


答案 1

您需要在 中的每个语句之后,否则执行将向动(所有低于您想要的案例的案例也将被调用),因此您将始终得到最后一个案例。break;case

switch(position) {
case 0:
    textView.setText(R.string.zero); 
    break; 
case 1:
    textView.setText(R.string.one);
    break; 
case 2:
    textView.setText(R.string.two);   
    break;  
case 3:
    textView.setText(R.string.three);
    break; 
case 4:
    textView.setText(R.string.four); 
    break; 
}

这是官方教程,说明何时使用以及何时不使用。break;


答案 2

您需要在每个分支之后:break;

switch (position) {
    case 0:
        textView.setText(R.string.zero);
        break; // <-- here
    // etc
}

当你不存在时,那些被称为跌倒;或者因为您或.:switchbreakreturnthrow

switch (someNumber) {
    case 0:
        return 0; 
        // no need for break here
    case 1:
        throw new IllegalArgumentException();
        // no need to break here
    case 2:
        System.out.println("Oh, I got two!");
        // fall through
    case 3:
        return 3;
    default:
        System.out.println("Meh")
        // No need to break: last possible branch
}

return -1;

将返回 3,即使您输入 2。

但除此之外,您需要.break