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

请求修改国际象棋骑士合法移动位置返回方法(不使用ArrayList)

解决国际象棋骑士移动返回无null数组的问题

你的问题是现有方法返回的数组包含大量null值,需要返回仅包含合法位置的数组,且不能使用ArrayList。可以通过先统计有效位置数量,再创建对应长度数组的方式解决:

实现思路

  1. 先遍历所有8种可能的骑士移动,统计落在8×8棋盘内的有效位置数量
  2. 根据统计出的数量创建对应长度的Position数组
  3. 再次遍历所有移动,将合法的位置依次存入新数组

修改后的代码

public Position[] moves(Position p) {
    int row = p.getRow();
    int col = p.getCol();
    int[][] moves = {{-1,-2},{1,-2},{-1,2},{1,2},{-2,-1},{-2,1},{2,-1},{2,1}};
    
    // 统计有效位置数量
    int validCount = 0;
    for (int[] move : moves) {
        int newRow = row + move[0];
        int newCol = col + move[1];
        if (newRow >= 1 && newRow <= 8 && newCol >= 1 && newCol <= 8) {
            validCount++;
        }
    }
    
    // 创建对应长度的结果数组
    Position[] validPositions = new Position[validCount];
    int index = 0;
    
    // 填充有效位置到结果数组
    for (int[] move : moves) {
        int newRow = row + move[0];
        int newCol = col + move[1];
        if (newRow >= 1 && newRow <= 8 && newCol >= 1 && newCol <= 8) {
            validPositions[index++] = new Position(newRow, newCol);
        }
    }
    
    return validPositions;
}

关键说明

  • 两次遍历完全基于数组操作,规避了动态集合类的使用
  • 当骑士处于(1,1)位置时,会返回仅包含(2,3)和(3,2)的长度为2的数组,完全符合需求
  • 保留了原有的棋盘边界判断逻辑,仅调整了数组的创建和填充逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:11