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 -&gt; line = /*getText*/

第二种解决方案:

您是否使用任何版本小于 13 的 jdk?那么这就是问题所在,因为 switch expressions 仅在 Java 13 及更高版本中添加

旁注

如果您想在 for 循环之外使用 String line,则必须在 for 循环之外声明变量

【讨论】:

您的第一个解决方案将不起作用,因为 case 0 -&gt; 语法是与 switch 表达式一起引入的。

以上是关于java循环中“字符串行=开关(a)的问题。无法实现案例的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组存储回循环中? [复制]

在 C 循环中更改 char* 字符串

c++ 在 for 循环中的 vector<char> 中的 for 循环中的内存分配

如何在 foreach 循环中为 char 变量赋值? C#

在“for”循环中运行整个“unsigned char”范围

如何将 XMM 寄存器中的数字存储到 asm 循环中的 char 数组中 -