我想做这样的事情:
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?
答案 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 1
和default
调用它,这样您就不会有重复的代码。
答案 4 :(得分:0)
不,在switch语句中,命令根本不重要。 此外,编译器始终维护一个哈希表以跳转到switch语句。因此,订购或增加套管根本不是问题。它始终是O(1)操作。 但是,这会减少您的案例切换:
switch(difficulty) {
case 2: i--; break;
default: i++; break;
}