切换语句,默认为先前定义的切换案例?

时间:2014-11-24 16:04:42

标签: java

我想做这样的事情:

int i = 0;

switch(difficulty) {
    case 1: i++; break;
    case 2: i--; break;
    default: case 1;
}   

这样的事情可能吗?我想防止重复的代码。我知道在这个特定的例子中没有理由这样做,因为重复的代码会很小。我能想出的唯一一件事是[使用转换案例的能力下降]:

switch(difficulty) {
    case 2: i--; break;
    default:
    case 1: i++; break;
}   

我宁愿不这样做,因为增加案例编号并在底部设置默认值会更有意义。

但是我想知道如果我这样做,它会搞砸引擎盖下的goto语句吗?特别是,不需要更长的时间来决定使用哪个goto语句,因为数字或乱序?订单在switch语句中是否重要?想象一下,所有案例都有相同的被调用几率,如果你以随机顺序而不是线性顺序将它们放在一边会有什么影响吗?

[编辑:对于我关于效率的问题,我发现了这一点:交换语句的顺序是否重要,简短的答案是否定的:Does switch case order affect speed? How does Java's switch work under the hood?

5 个答案:

答案 0 :(得分:10)

这应该符合您的需求:

switch(difficulty) {
    case 2: i--; break;
    default: i++; break;
}

答案 1 :(得分:4)

这可能是您需要/想要的,并且是有效的代码

int i = 0;      
    switch (difficulty) {
    default:
    case 1: i++; break;
    case 2: i--; break;
    }

答案 2 :(得分:3)

据我所知,案例的顺序并没有以任何方式改变switch语句,要么你的参数适合于一个案例,要么它不适合,所以在你的情况下,无关紧要你有第一个案例。 如果您愿意,可以参考文档作为参考。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

答案 3 :(得分:1)

(从评论中删除,因为它似乎有帮助)

添加私有方法并从case 1default调用它,这样您就不会有重复的代码。

答案 4 :(得分:0)

不,在switch语句中,命令根本不重要。 此外,编译器始终维护一个哈希表以跳转到switch语句。因此,订购或增加套管根本不是问题。它始终是O(1)操作。 但是,这会减少您的案例切换:

switch(difficulty) {
    case 2: i--; break;
    default: i++; break;
}