求助:基于Java二维数组实现车辆路径追踪的命令处理方案
求助:Java二维数组实现车辆路径追踪技术支持
需要通过二维数组记录所有操作,实现车辆行驶路径的追踪,当前代码存在转向、前进功能未实现的问题,陷入开发困境。
原代码:
boolean flag = true; while(true){ String consoleInput = in.nextLine(); commands.add(cmd); // 注意:此处cmd未定义,应改为consoleInput switch (consoleInput) { case "right": //how to turn right in 2d array break; case "left": //how to turn left in 2d array break; case "exit": flag=false; break; default: int moveForward = consoleInput; // 注意:类型不匹配,需转换为int //how to move forward in 2d array } }
解决方案实现步骤:
1. 定义核心状态变量
先维护车辆的当前位置、方向,以及用于记录路径的二维数组:
import java.util.Scanner; import java.util.ArrayList; // 定义方向枚举,简化转向逻辑 enum Direction { UP, RIGHT, DOWN, LEFT } public class VehiclePathTracker { public static void main(String[] args) { Scanner in = new Scanner(System.in); ArrayList<String> commands = new ArrayList<>(); // 初始化路径网格(示例为10x10,可按需调整大小) int gridSize = 10; int[][] pathGrid = new int[gridSize][gridSize]; // 初始状态:从网格中心(5,5)出发,初始方向向上 int currentX = 5; int currentY = 5; Direction currentDir = Direction.UP; pathGrid[currentY][currentX] = 1; // 标记初始位置为已经过 boolean flag = true; while(flag){ String consoleInput = in.nextLine().trim(); commands.add(consoleInput); switch (consoleInput) { case "right": // 右转:方向按UP→RIGHT→DOWN→LEFT循环 currentDir = Direction.values()[(currentDir.ordinal() + 1) % 4]; break; case "left": // 左转:等价于右转3次,方向按UP→LEFT→DOWN→RIGHT循环 currentDir = Direction.values()[(currentDir.ordinal() + 3) % 4]; break; case "exit": flag = false; break; default: try { int moveSteps = Integer.parseInt(consoleInput); // 逐步前进并标记路径 for (int i = 0; i < moveSteps; i++) { // 根据当前方向更新坐标 switch (currentDir) { case UP: currentY--; break; case RIGHT: currentX++; break; case DOWN: currentY++; break; case LEFT: currentX--; break; } // 检查是否超出网格边界,越界则回退并停止 if (currentX < 0 || currentX >= gridSize || currentY < 0 || currentY >= gridSize) { System.out.println("已到达网格边界,停止移动"); // 回退到最后有效位置 switch (currentDir) { case UP: currentY++; break; case RIGHT: currentX--; break; case DOWN: currentY--; break; case LEFT: currentX++; break; } break; } // 标记当前位置为已经过 pathGrid[currentY][currentX] = 1; } } catch (NumberFormatException e) { System.out.println("无效输入,请输入数字(前进步数)或指令(right/left/exit)"); } break; } } // 打印路径网格,查看行驶轨迹 System.out.println("\n车辆行驶路径网格:"); for (int[] row : pathGrid) { for (int cell : row) { System.out.print(cell + " "); } System.out.println(); } in.close(); } }
2. 关键逻辑说明
- 转向实现:利用枚举的
ordinal()方法获取方向索引,通过取模运算实现方向循环切换,避免复杂条件判断。 - 前进实现:逐步更新坐标,每次移动后检查边界,确保车辆不会超出网格范围,同时在二维数组中标记已经过的位置。
- 异常处理:捕获非数字输入的异常,提升程序健壮性。
内容的提问来源于stack exchange,提问作者MaSu
相关产品推荐
相关产品推荐

