如果 - 其他工作,切换不

时间:2013-06-27 14:06:38

标签: java android if-statement switch-statement

我正在创建一个带有文本图像网格的应用程序,每个应用程序打开一个不同的活动。它工作正常,但出于设计目的,我想用if-else statements替换switch 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);    

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

9 个答案:

答案 0 :(得分:62)

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;的{​​{3}}。

答案 1 :(得分:16)

每个分支后需要break;

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

当你switch存在break时,return的合法使用被称为堕落;或者因为您throwswitch (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; 。:

break
即使输入2,

也会返回3.

但是否则你需要{{1}}。

答案 2 :(得分:9)

在每个案例之后使用break语句应该解决问题。在最后一种情况之后我也会使用默认语句。

答案 3 :(得分:7)

这是解决方案。您需要使用break来避免经历每种情况:

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;

我建议您阅读有关switch statement

的oracle文档

答案 4 :(得分:5)

您需要在eace案例操作后使用break语句。在switch-case语句中,如果你不使用break语句,那么在该特定语句之后的所有情况也将被执行

case 0:
   textView.setText(R.string.zero);    
   break;

答案 5 :(得分:5)

不要忘记在每个案例之后加break;:像那样:

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

答案 6 :(得分:3)

Switch-case 语句中,您需要在每个案例之后加上 break;

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;
default:
    System.out.println("not available");
}

此外,您需要最后添加默认值,因为当所有情况都错误时,执行默认值:操作。

switch-case 语句中没有忘记中断;和默认操作。

答案 7 :(得分:1)

每个break语句都会终止封闭的switch语句。控制流继续切换块后面的第一个语句。 break语句是必要的,因为如果没有它们,switch块中的语句就会失败:匹配的case标签之后的所有语句都会按顺序执行,而不管后续case标签的表达式,直到遇到break语句。

Switch比if-else语句

更快

底线:默认是可选的(与交换机中的else语句一样),Break是必需的。

有趣的事实:即使您忘记放置break语句,也不会看到任何编译错误。

答案 8 :(得分:1)

switch在每种情况下都需要break。但是在你的情况下,通过定义一个数组可以更简单地完成,如下所示。

String values = {R.string.zero, R.string.one, R.string.two, ... };

使用此选项填充textView:textView.setText(values[position]);