我正在创建一个Android应用程序,它将调用一个解析多个微调器对象的选定项的方法。我是Java的新手,我不确定在这个实例中哪个语句最适合用于程序流程。我应该只使用多个If语句吗?如:
If(spinner1.getSelectedItemPosition() == 0 && spinner2.getSelectedItemPosition() == 2 && spinner3.getSelectedItemPosition() == 4)
/* do some stuff
或者使用switch语句会更好吗?
switch(spinner1.getSelectedItem())
case 1:
switch(spinner2.getSelectedItem())
case 1:
switch(spinner3.getSelectedItem())
case 1:
/* do something
基本上我在这里要做的是评估每个微调器对象的选定项,然后根据该评估创建一个新的Activity。但是初始活动包含几个微调框,每个框都有几个选项,所以我不确定设计控制语句的最佳方法。对所选项的每个可能组合使用if语句似乎有点笨拙。另外,我不确定哪个选项实际上会使代码按照我的意图运行。
答案 0 :(得分:2)
选择可读性高于其他任何因素,因为在性能或程序流程中没有太大差异。
答案 1 :(得分:1)
可能一个switch语句会更有效,因为你可以将多个结果发送到相同的代码段(听起来可能是你的应用程序可能需要的),就像这样
switch(value) {
case 0:
case 1:
//Do THIS
break;
case 2:
//Do THAT
break;
default:
//Doesn't match any
}
如果value的计算结果为0或1,则第一部分将被执行,您只需编写一次操作代码。至于细节(现在我只是变得有创意),你可以将三个微调器值移动到一个整数并切换结果。如果以十六进制编写case语句,则每个语句的状态将更具可读性。
int result = 0;
result += (byte)(spinner1.getSelectedItemPosition() << 16);
result += (byte)(spinner2.getSelectedItemPosition() << 8);
result += (byte)(spinner3.getSelectedItemPosition());
switch(result) {
case 0x000000: //All spinners 0
case 0x010201: //S1 = 1, S2 = 2, S3 = 1
//Do something
break;
case 0x010101: //S1 = 1, S2 = 1, S3 = 1
//Do something else
break;
default:
//Everything else (good if most of your options go to the same Activity)
}
希望有帮助!
此示例可能存在缺陷:每个微调器只允许256个选项;)
答案 2 :(得分:0)
我认为这几乎取决于用户有多少选择,如果用户太多,那么切换可能是最佳选择。
但是,您也可以按类别排列它们,每个模块都在不同的模块中,例如进度页面,每次用户选择一个类别时,显示下一个类别等等
答案 3 :(得分:0)
所以四个微调器中的每一个都有x个状态?或者你想只捕获一个特定的状态并为其他状态设置一些“其他”分支?
最后这将变得非常冗长,因此级联切换语句可能更容易阅读。
根据输入数据,您还可以执行其他操作:
如果你有4个微调器,那么将第一个的位置乘以1000,将第二个的位置乘以100,将第三个的位置乘以10,将最后一个乘以1.然后将数字加在一起并拥有几千{{1语句): - )
答案 4 :(得分:0)
从纯粹的性能角度来看,switch语句更快。传递给开关的初始表达式将被计算一次,然后根据案例值进行检查。对于if语句,每次都会评估if检查的左侧和右侧。所以使用if语句会慢一些。