如果 - 其他工作,切换不

Rya*_*les 12 java android if-statement switch-statement

我正在创建一个具有文本图像网格的应用程序,每个应用程序打开一个不同的活动.它工作正常,但只是为设计目的,我想取代我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....
Run Code Online (Sandbox Code Playgroud)

我想用:

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);    
Run Code Online (Sandbox Code Playgroud)

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

Sot*_*lis 62

你需要break;在a中的每个语句之后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; 
}
Run Code Online (Sandbox Code Playgroud)

这是官方教程,解释何时何时不使用break;.

  • 有人可能嫉妒你得到的轻松代表.:P (10认同)
  • @JaredBurrows SO很慷慨. (6认同)

fge*_*fge 16

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

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

合法使用switch当你不break存在时,那些被称为堕落; 或者因为你returnthrow.:

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;
Run Code Online (Sandbox Code Playgroud)

即使你输入2也会返回3.

但是否则你需要break.

  • 在默认结束时放置休息总是一个很好的模式:因为有人可以在其下面添加另一个案例并获得意外的跌倒. (2认同)

小智 9

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


poi*_*rez 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;
Run Code Online (Sandbox Code Playgroud)

我建议阅读有关switch语句的oracle文档.


sti*_*ike 5

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

case 0:
   textView.setText(R.string.zero);    
   break;
Run Code Online (Sandbox Code Playgroud)


g00*_*0dy 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;
}
Run Code Online (Sandbox Code Playgroud)