我正在创建一个带有文本图像网格的应用程序,每个应用程序打开一个不同的活动。它工作正常,但出于设计目的,我想用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
,但是相反,并使每个意图等于第一个。我的语法错了还是不适用于我的情况?
答案 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
的合法使用被称为堕落;或者因为您throw
或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;
。:
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]);