Android:无法决定多个if或嵌套的switch语句

时间:2011-02-21 19:34:43

标签: java if-statement switch-statement

我正在创建一个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语句似乎有点笨拙。另外,我不确定哪个选项实际上会使代码按照我的意图运行。

5 个答案:

答案 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语句会慢一些。