0

我做了一个井字游戏程序。行有问题String line = switch(a)“非法开始表达”)。

它是这个游戏的一个窗口应用程序。

我不知道如何解决这个问题。

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。

4

3 回答 3

2

开关表达式作为预览功能在 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;
        };
于 2021-12-16T08:07:50.183 回答
0

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();
        };
于 2021-12-16T08:12:06.500 回答
-1

第一个解决方案:

首先声明String line,然后使用 switch 表达式设置值。

case 0 -> line = /*getText*/

第二种解决方案:

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

边注

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

于 2021-12-16T08:13:04.183 回答