java循环中“字符串行=开关(a)的问题。无法实现案例
Posted
技术标签:
【中文标题】java循环中“字符串行=开关(a)的问题。无法实现案例【英文标题】:problem with "String line = switch (a) in java loop. Cant implement cases 【发布时间】:2022-01-19 08:16:07 【问题描述】:我做了一个井字游戏程序。 String line = switch(a)
行有问题("illegal start of expression")。
是这个游戏的一个窗口应用。
我不知道如何解决这个问题。
public void checkIfGameIsOver()
for (int a = 0; a < 8; a++)
String line = switch (a)
case 0 -> button1.getText() + button2.getText() + button3.getText();
case 1 -> button4.getText() + button5.getText() + button6.getText();
case 2 -> button7.getText() + button8.getText() + button9.getText();
case 3 -> button1.getText() + button5.getText() + button9.getText();
case 4 -> button3.getText() + button5.getText() + button7.getText();
case 5 -> button1.getText() + button4.getText() + button7.getText();
case 6 -> button2.getText() + button5.getText() + button8.getText();
case 7 -> button3.getText() + button6.getText() + button9.getText();
default -> null;
;
我使用的是 Java 版本 1.8.0_231。
【问题讨论】:
Java 8 不支持 switch 表达式。 您可以将其替换为条件表达式链。它会看起来很相似 好的,谢谢您的回答。 J 在我的笔记本电脑上有不同的版本,在我的工作电脑上有不同的版本。 【参考方案1】:Switch 表达式作为预览功能在 Java 12 中引入,并在 Java 13 (JEP 354) 中正式提供。鉴于您使用的是 Java 8,您不能使用 switch 表达式。
您要么需要升级到更新的 Java 版本(例如 Java 17),要么使用 switch 语句。
即:
public void checkIfGameIsOver()
for (int a = 0; a < 8; a++)
String line;
switch (a)
case 0:
line = button1.getText() + button2.getText() + button3.getText();
case 1:
line = button4.getText() + button5.getText() + button6.getText();
case 2:
line = button7.getText() + button8.getText() + button9.getText();
case 3:
line = button1.getText() + button5.getText() + button9.getText();
case 4:
line = button3.getText() + button5.getText() + button7.getText();
case 5:
line = button1.getText() + button4.getText() + button7.getText();
case 6:
line = button2.getText() + button5.getText() + button8.getText();
case 7:
line = button3.getText() + button6.getText() + button9.getText();
default:
line = null;
;
【讨论】:
【参考方案2】:Java 8 不支持它。但是,您可以将其替换为 Java8 支持的条件表达式,看起来非常相似。
public void checkIfGameIsOver()
for (int a = 0; a < 8; a++)
String line = a==0 ? button1.getText() + button2.getText() + button3.getText() :
a==1 ? button4.getText() + button5.getText() + button6.getText():
a==2 ? button7.getText() + button8.getText() + button9.getText():
a==3 ? button1.getText() + button5.getText() + button9.getText():
a==4 ? button3.getText() + button5.getText() + button7.getText():
a==5 ? button1.getText() + button4.getText() + button7.getText():
a==6 ? button2.getText() + button5.getText() + button8.getText():
a==7 ? button3.getText() + button6.getText() + button9.getText():
null;
;
免责声明a==7
是可选的,因为它在最后一次迭代中始终为真
应该是这样的
public void checkIfGameIsOver()
for (int a = 0; a < 8; a++)
String line = a==0 ? button1.getText() + button2.getText() + button3.getText() :
a==1 ? button4.getText() + button5.getText() + button6.getText():
a==2 ? button7.getText() + button8.getText() + button9.getText():
a==3 ? button1.getText() + button5.getText() + button9.getText():
a==4 ? button3.getText() + button5.getText() + button7.getText():
a==5 ? button1.getText() + button4.getText() + button7.getText():
a==6 ? button2.getText() + button5.getText() + button8.getText():
button3.getText() + button6.getText() + button9.getText();
;
【讨论】:
这可能会比使用 switch 语句执行得少。【参考方案3】:第一个解决方案:
先声明String line
,然后用switch表达式设置值。
case 0 -> line = /*getText*/
第二种解决方案:
您是否使用任何版本小于 13 的 jdk?那么这就是问题所在,因为 switch expressions 仅在 Java 13 及更高版本中添加
旁注
如果您想在 for 循环之外使用 String line
,则必须在 for 循环之外声明变量
【讨论】:
您的第一个解决方案将不起作用,因为case 0 ->
语法是与 switch 表达式一起引入的。以上是关于java循环中“字符串行=开关(a)的问题。无法实现案例的主要内容,如果未能解决你的问题,请参考以下文章
在java中,新循环,也就是增强for循环怎么用?是啥格式?