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

Java二维数组值追踪更新及10×10迷宫导航程序开发问询

Java二维数组迷宫导航问题解决方案

嘿,我来帮你搞定这个迷宫程序的问题!先从你提到的第一个核心点说起,再一步步完成剩下的功能。

一、二维数组的数值追踪与更新

其实Java的二维数组本质就是「数组的数组」,要追踪和更新数值超级直接:

  • 用两个变量(比如currentRow和currentCol)记录用户当前在数组中的位置索引;
  • 要更新某个位置的数值,直接通过数组名[行索引][列索引] = 新值的方式操作就行;
  • 比如用户经过的位置,咱们可以设为2(只要不是0或1都可以),每次移动后把旧位置和新位置都标记成这个值,就能清晰追踪路径了。

二、完整迷宫导航程序实现步骤

结合你已经完成的数组创建和填充,咱们把剩下的功能补全,直接上可运行的代码+细节解释:

1. 准备必要的工具类

首先导入随机数生成和用户输入的类:

import java.util.Random;
import java.util.Scanner;

2. 生成10×10的随机迷宫数组

你已经能完成这一步,这里加个小优化:确保起始位置不是墙体(避免用户一开始就卡墙):

public class MazeNavigator {
    public static void main(String[] args) {
        // 1. 生成10×10的随机迷宫(0=无墙,1=墙体)
        Random random = new Random();
        int[][] maze = new int[10][10];
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                maze[i][j] = random.nextInt(2); // 随机生成0或1
            }
        }

        // 2. 设置起始位置(比如第0行第5列),确保不是墙体
        int startRow = 0;
        int startCol = 5;
        maze[startRow][startCol] = 0;
        // 用currentRow和currentCol追踪用户当前位置,同时标记起点为路径(用2表示)
        int currentRow = startRow;
        int currentCol = startCol;
        maze[currentRow][currentCol] = 2;

3. 实现用户导航循环

这里用while循环检测是否到达底部(数组最后一行索引是9,因为从0开始计数),同时处理用户的移动输入:

// 3. 用户导航循环
        Scanner scanner = new Scanner(System.in);
        System.out.println("欢迎进入迷宫!请输入方向:up/down/left/right,到达底部即通关~");
        while (currentRow != 9) { // 没到达底部就继续循环
            System.out.print("请输入移动方向:");
            String direction = scanner.nextLine().trim().toLowerCase();

            // 初始化新位置为当前位置
            int newRow = currentRow;
            int newCol = currentCol;

            // 根据输入计算新位置
            switch (direction) {
                case "up":
                    newRow--;
                    break;
                case "down":
                    newRow++;
                    break;
                case "left":
                    newCol--;
                    break;
                case "right":
                    newCol++;
                    break;
                default:
                    System.out.println("无效方向!请输入up/down/left/right中的一个~");
                    continue; // 跳过本次循环,重新输入
            }

            // 检查新位置是否合法:在数组范围内,且不是墙体
            boolean isMoveValid = newRow >= 0 && newRow < 10 
                    && newCol >= 0 && newCol < 10 
                    && maze[newRow][newCol] != 1;

            if (isMoveValid) {
                // 更新路径:旧位置标记为路径
                maze[currentRow][currentCol] = 2;
                // 更新当前位置到新坐标
                currentRow = newRow;
                currentCol = newCol;
                // 新位置标记为路径
                maze[currentRow][currentCol] = 2;
                System.out.println("移动成功!");
            } else {
                System.out.println("无法移动!该位置是墙体或超出迷宫边界~");
            }
        }

4. 打印最终带路径的迷宫

循环结束(用户到达底部)后,打印完整的迷宫数组:

// 4. 打印最终带路径的迷宫
        System.out.println("\n恭喜你到达迷宫底部!最终路径如下:");
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.print(maze[i][j] + " ");
            }
            System.out.println();
        }

        scanner.close();
    }
}

一些关键细节说明

  • 路径标记:用2表示用户走过的路径,你也可以换成其他非0非1的数字(比如3),只要能区分开墙体和无墙区域就行;
  • 边界检查:一定要判断新位置的行和列是否在0-9之间,不然会抛出数组越界异常;
  • 输入处理:用toLowerCase()把用户输入转成小写,避免大小写敏感的问题;用trim()去掉输入前后的空格,提升容错性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:08