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

Java二维数组字符检测问题:象棋程序胜负判定功能异常

问题根因与修复方案

核心bug定位

你的get方法里二维数组的下标顺序写反了,这是导致状态判断全部错误的根源:

  • Java中char[][] board的第一个索引是行索引,第二个是列索引
  • 你在get方法的边界判断里已经明确了规则:y是行索引(对应y < board.length),x是列索引(对应x < board[0].length)
  • 但返回值错误写为board[x][y],相当于把行列索引互换,绝大多数合法坐标都会触发数组越界,直接返回\0,自然无法匹配到K和S

修复方案

把get方法的返回语句修改即可:

public char get(int x, int y) {
    if(x < board[0].length && x >= 0 && y < board.length && y >= 0){
        // 原错误代码 return board[x][y];
        return board[y][x];
    }
    else
        return '\0';
}

可选优化

decideWinner方法不需要遍历两次棋盘,单次遍历就可以同时检测两个王的存活状态,效率更高:

public int decideWinner(){
    boolean kingWhiteIsAlive = false;
    boolean kingBlackIsAlive = false;

    for(int y = 0; y < board.length;y++){
        for(int x = 0;x < board[0].length;x++){
            char c = get(x,y);
            if(c == 'K'){
                kingWhiteIsAlive = true;
            }else if(c == 'S'){
                kingBlackIsAlive = true;
            }
            // 两个王都找到可以提前退出遍历,减少不必要的循环
            if(kingWhiteIsAlive && kingBlackIsAlive) break;
        }
        if(kingWhiteIsAlive && kingBlackIsAlive) break;
    }

    if(kingWhiteIsAlive && kingBlackIsAlive){
        return 0;
    }else if(kingWhiteIsAlive){
        return 1;
    }else if(kingBlackIsAlive){
        return 2;
    }else{
        return -1;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:02