我发现了一种在Java中使用switch
语句的有趣方法,我无法理解所有逻辑。
有人可以帮助深入了解所有细节吗?
这是代码:
private static int counter = 0;
public static Shape randomFactory() {
int xVal = rand.nextInt(100);
int yVal = rand.nextInt(100);
int dim = rand.nextInt(100);
switch (counter++ % 3) {
default:
case 0:
return new Circle(xVal, yVal, dim);
case 1:
return new Square(xVal, yVal, dim);
case 2:
return new Line(xVal, yVal, dim);
}
}
一般来说,我理解这个逻辑,
default
到底意味着什么:
switch (counter++ % 3) {
default:
switch (counter++ % 3)
如何找到等于大小写?这里没有提出任何brake
。
有什么建议吗?
答案 0 :(得分:3)
在你的情况下,你在case语句的最开始使用default
块,这有点奇怪,因为default
意味着如果没有任何条件条件匹配,这部分代码将会执行。您还应该查看fall through。您通过返回避免使用它,但通常使用break
完成。
switch (counter++ % 3)
先计算counter++ % 3
,然后将其与相应的case
进行匹配。
答案 1 :(得分:2)
default
表达式与任何switch
标签不匹配,则 case
标记将执行的块。在您的示例中,default
不包含break
,因此它会覆盖并执行与case 0
相同的代码。
请注意,由于case
表达式的每个可能值都有switch
标签,因此default
实际上是无操作。
答案 2 :(得分:1)
default:
它只是意味着switch语句中没有任何条件匹配代码,默认将执行。
答案 3 :(得分:0)
default
中没有匹配时, case
将会执行。在这种情况下,default
无效,因为它永远不会执行。请考虑以下情况。
switch(input){
case 1:
// do something
break;
case 2:
// do something
break;
default:
// if input is not 1 or 2 this will execute.
break;
}
答案 4 :(得分:0)
default
条款在这里没用:由于你的%3
它永远不会发生。
您是否会将%3
修改为%4
它会捕获一些数据,但由于既没有break
也没有return
语句,它会像{{case 0
一样执行1}}。
答案 5 :(得分:0)
默认值是一个开关标签,其中包含在没有其他标签匹配时要执行的语句。来自JLS §14.11:
因此,在这种情况下,default
标签将不执行任何操作,因为总会有匹配项。
答案 6 :(得分:0)
默认情况下没有中断,所以它什么都不做,这只是一个落实的例子。
答案 7 :(得分:0)
请从这里阅读有关switch语句的信息 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
默认表示如果任何情况与switch条件不匹配,则调用default。
计数器++%3 ..你的计数器为0所以它将与情况0匹配。