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

Java实现行矩阵中0元素四方向移动及控制台地图更新

矩阵0元素四方向移动+控制台实时更新实现方案

实现思路

  • 单独维护0元素的当前行列坐标,避免每次移动都遍历全矩阵查找位置
  • 接收到移动指令后先计算目标位置坐标,先做边界合法性校验,越界则直接拦截不执行移动
  • 合法移动直接修改原矩阵:将0的原位置赋值为.,目标位置赋值为0,同步更新记录的0坐标
  • 封装独立的地图打印方法,每次移动完成后调用该方法重绘全矩阵,通过分隔线区分不同状态的地图,实现视觉上的实时更新效果
  • 循环接收控制台输入的方向指令,即可实现连续交互控制

完整实现代码

import java.util.Scanner;

public class MatrixZeroMove {
    // 全局记录0元素的当前行、列位置
    private static int zeroRow;
    private static int zeroCol;
    private static String[][] map;

    public static void main(String args[]) {
        // 初始化基础地图
        map = new String[][]{
                {".",".","."},
                {".","0","."},
                {".",".","."}
        };
        // 初始化时遍历一次找到0的初始坐标
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                if ("0".equals(map[i][j])) {
                    zeroRow = i;
                    zeroCol = j;
                    break;
                }
            }
        }
        Scanner scanner = new Scanner(System.in);
        // 首次打印初始地图
        printMap();
        System.out.println("控制说明:w=上移,s=下移,a=左移,d=右移,输入e退出程序");
        // 循环接收指令
        while (scanner.hasNext()) {
            String input = scanner.next().trim();
            if ("e".equals(input)) {
                System.out.println("程序已退出");
                break;
            }
            move(input);
            printMap();
        }
        scanner.close();
    }

    /**
     * 执行0元素的移动逻辑
     * @param direction 输入的方向指令
     */
    private static void move(String direction) {
        int targetRow = zeroRow;
        int targetCol = zeroCol;
        // 根据指令计算目标坐标
        switch (direction) {
            case "w":
                targetRow--;
                break;
            case "s":
                targetRow++;
                break;
            case "a":
                targetCol--;
                break;
            case "d":
                targetCol++;
                break;
            default:
                System.out.println("无效指令,请输入w/a/s/d控制方向");
                return;
        }
        // 边界校验:目标位置超出矩阵范围则不移动
        if (targetRow < 0 || targetRow >= map.length || targetCol < 0 || targetCol >= map[0].length) {
            System.out.println("移动失败:已到达矩阵边界,无法继续向该方向移动");
            return;
        }
        // 更新矩阵内容
        map[zeroRow][zeroCol] = ".";
        map[targetRow][targetCol] = "0";
        // 更新记录的0坐标
        zeroRow = targetRow;
        zeroCol = targetCol;
    }

    /**
     * 打印当前矩阵地图
     */
    private static void printMap() {
        System.out.println("----------当前地图----------");
        for(int i = 0; i < map.length; i++){
            for(int j = 0; j < map[i].length; j++){
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
    }
}

使用说明

  • 运行程序后控制台会先输出初始3*3矩阵,0默认在矩阵中心位置
  • 输入对应控制字符后按回车即可触发移动:
    • 输入w:0向上移动一格
    • 输入s:0向下移动一格
    • 输入a:0向左移动一格
    • 输入d:0向右移动一格
    • 输入e:终止程序运行
  • 若移动方向超出矩阵边界,控制台会给出错误提示,矩阵状态不会改变
  • 每次移动完成后会自动打印最新的矩阵状态,通过分隔线和历史输出做区分,可直观看到0的移动效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:15:29