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

