Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果其他操作正常,则不切换_Java_Android_If Statement_Switch Statement - Fatal编程技术网

Java 如果其他操作正常,则不切换

Java 如果其他操作正常,则不切换,java,android,if-statement,switch-statement,Java,Android,If Statement,Switch Statement,我正在制作一个应用程序,它有一个带有文本的网格图像,每个图像打开一个不同的活动。它工作得很好,但只是出于设计目的,我想用开关语句替换if-else语句(我想我可以这么做),但是它不工作。现在,我在每个图像上设置标签的工作代码是: if(position == 0) textView.setText(R.string.zero); else if(position == 1) textView.setText(R.string.one); else

我正在制作一个应用程序,它有一个带有文本的网格图像,每个图像打开一个不同的活动。它工作得很好,但只是出于设计目的,我想用
开关语句替换
if-else语句
(我想我可以这么做),但是它不工作。现在,我在每个图像上设置标签的工作代码是:

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

但当我这样做时,ever标签是我定义的最后一个标签(在我的示例中,它将是“四”)。对于每个对象,我也有一个类似的代码,用
位置
变量启动不同的
意图
,但这会产生相反的效果,使每个意图与第一个意图相等。我的语法是错误的还是不适合我的情况

您需要
中断案例
中的每个语句之后执行code>,否则执行将向下流动(低于所需案例的所有案例也将被调用),因此您将始终得到最后一个案例

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

这就是解决方案。您需要使用
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;

我建议您阅读有关的oracle文档。

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

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

在每个案例之后使用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 (position) {
    case 0:
        textView.setText(R.string.zero);
        break; // <-- here
    // etc
}
即使输入2,也将返回3


但是,否则你需要
break

别忘了把
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;
}

开关情况下语句中,您需要放置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");
}
此外,您还需要在最后放置default:,因为当所有情况都错误时,此时将执行default:action


开关情况下语句中,不要忘记断开;和默认操作。

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

Switch比if-else语句快

底线:默认值是可选的(与switch中的else语句类似),Break是必需的


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

在每种情况下,
开关需要使用
break
。但在您的例子中,可以通过定义如下所示的数组来简化操作

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

使用此选项填充textView:
textView.setText(值[位置])

在默认值末尾加一个中断总是一个好模式:因为有人可能在它下面加另一个案例,并得到意外的失败。在默认值末尾加一个中断总是一个好模式:因为有人可能在它下面加另一个案例,并得到意外的失败。