Discuss / Java / Java12switch新语法穿透的困惑

Java12switch新语法穿透的困惑

Topic source

纯大大哟

#1 Created at ... [Delete] [Delete and Lock User]

switch (choise) {

case 1->{

switch(random) {

case 1->System.out.println("剪刀"+"PK"+"剪刀"+"平局");

case 2->System.out.println("剪刀"+"PK"+"石头"+"你输啦");

default->System.out.println("剪刀"+"PK"+"布"+"你赢啦");

}这里

}

case 2->{

switch(random) {

case 1->System.out.println("石头"+"PK"+"剪刀"+"你赢啦");

case 2->System.out.println("石头"+"PK"+"石头"+"平局");

default->System.out.println("石头"+"PK"+"布"+"你输啦");

}这里

}

default->{

switch(random) {

case 1->System.out.println("布"+"PK"+"剪刀"+"你输啦");

case 2->System.out.println("布"+"PK"+"石头"+"你赢啦");

default->System.out.println("布"+"PK"+"布"+"平局");

}

}

}

这是我写的Switch的部分,在我标注  这里  的地方,如果不写上break;或者;,就会出现所谓的switch穿透,我搞不懂原因,想请教一下。

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

先打印变量的值,再执行switch,再对比结果。在验证信息都没有的情况下不要轻易下结论。

纯大大哟

#3 Created at ... [Delete] [Delete and Lock User]

老师,我之前打印过变量的值,是没有问题的。

比如

choise=1,random=3,

剪刀PK布你赢啦

石头PK布你输啦

布PK布平局

纯大大哟

#4 Created at ... [Delete] [Delete and Lock User]

老师,我试了下在控制台编译运行的结果是没有问题的。只有在Eclipse里,才会出现上边所说的情况。

廖雪峰

#5 Created at ... [Delete] [Delete and Lock User]

恭喜你发现了Eclipse的bug!他的语法分析器有问题,你把最后的default用{}括起来就行:

		switch (choise) {
		case 1 -> {
			switch (random) {
			case 1 -> System.out.println("剪刀" + "PK" + "剪刀" + "平局");
			case 2 -> System.out.println("剪刀" + "PK" + "石头" + "你输啦");
			default -> {
				System.out.println("剪刀" + "PK" + "布" + "你赢啦");
			}
			}
		}

纯大大哟

#6 Created at ... [Delete] [Delete and Lock User]

已解决,谢谢老师


  • 1

Reply