You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

井字棋游戏第二行获胜判定方法失效问题求助

解决井字棋第二行三连X无法触发高亮的问题

我帮你找到了两个关键问题,正是它们导致第二行的胜利判定失效:

1. 第二行中间按钮的监听器引用错误

在twoTwoListener的actionPerformed方法里,你错误地引用了第一行中间按钮(oneTwobutton)来获取文本,而不是当前点击的第二行中间按钮(twoTwobutton):

// 错误代码:拿错了按钮对象
String twoTwoString = oneTwobutton.getText().toString();

这个错误会导致:当你点击第二行中间按钮并设置为"X"后,程序实际在检查第一行中间按钮的文本是否为"X"——显然不成立,所以不会执行rowTwo +=5的操作,rowTwo永远到不了15,自然触发不了第二行的高亮逻辑。

修正后的代码:

private class twoTwoListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        if(five) getTurn(twoTwobutton);
        five = false;
        // 修正:引用当前点击的twoTwobutton
        String twoTwoString = twoTwobutton.getText().toString();
        if (twoTwoString.equals("X")) {
            if(x5 == 0) {
                colTwo += 5;
                rowTwo += 5;
            }
            x5++;
            checkWinColumX();
            checkWinRowX();
        }
    }
}

2. 胜利判定方法的语法错误

在checkWinRowX方法的第一行,存在两个语法问题:

// 错误代码:赋值操作+多余分号
if(gameWon = false);
  • 用了赋值运算符=而非相等判断运算符==,会强制把gameWon设为false,而不是判断它的状态;
  • 语句末尾的分号;会让if语句直接结束,后面的高亮逻辑会无条件执行,即使游戏已经获胜。

修正后的代码:

public void checkWinRowX() {
    // 修正:用==判断状态,去掉多余分号
    if(gameWon == false) {
        // first row
        if(rowOne == 15) {
            oneOnebutton.setBackground(Color.YELLOW);
            oneTwobutton.setBackground(Color.YELLOW);
            oneThreebutton.setBackground(Color.YELLOW);
            gameWon = true; // 建议设置gameWon为true,避免重复检查
        }
        //Second row
        if(rowTwo == 15) {
            twoOnebutton.setBackground(Color.YELLOW);
            twoTwobutton.setBackground(Color.YELLOW);
            twoThreebutton.setBackground(Color.YELLOW);
            gameWon = true;
        }
        //Third row
        if(rowThree == 15) {
            threeOnebutton.setBackground(Color.YELLOW);
            threeTwobutton.setBackground(Color.YELLOW);
            threeThreebutton.setBackground(Color.YELLOW);
            gameWon = true;
        }
    }
}

额外优化建议

为了避免类似的按钮引用错误,你可以把所有按钮的监听器合并成一个通用监听器:

  • 给每个按钮设置ActionCommand,存储它的行列信息(比如"2,2");
  • 在通用监听器里解析ActionCommand,获取行和列,然后统一更新对应的row和col变量。
    这样不仅能减少冗余代码,还能大幅降低出错概率。

内容的提问来源于stack exchange,提问作者carteeeeeeer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:55