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

求助:基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:33:33