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
相关产品推荐
相关产品推荐

