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(值[位置])代码>在默认值末尾加一个中断总是一个好模式:因为有人可能在它下面加另一个案例,并得到意外的失败。在默认值末尾加一个中断总是一个好模式:因为有人可能在它下面加另一个案例,并得到意外的失败。