我需要创建一个1
和0
s的随机迷宫,而且无需解决。我写的程序需要能够搜索这个迷宫并告诉我是否有可能从头到尾。 0
可以通过1
,但[[I@4ea20232
就像墙一样。目前我只是想创建随机数组,以及我到目前为止编译的内容,但它返回:import java.util.Random;
public class SearchMaze{
public static void main(String [] args){
int n = 8;
int m = 7;
int[][] maze = new int[n][m];
Random rand = new Random();
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
maze[i][j] = rand.nextInt(2);
System.out.println(maze);
}
}
。到目前为止,我有这个:
1000000
1111100
0000001
1110111
1010101
1010101
0000110
1110000
我想尝试这样的事情:
{{1}}
我似乎无法找到为什么这样的事情无法发挥作用。
答案 0 :(得分:2)
问题是数组的toString
会返回无用的信息。使用列表无济于事,因为它会用逗号在一行上打印所有内容。尝试使用嵌套循环来输出数据。
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
System.out.print(maze[i][j]);
}
System.out.print('\n');
}
答案 1 :(得分:2)
当您打印System.out.println(a);
之类的对象时,您实际上正在调用该对象的toString()
方法。因此,您真正打电话给System.out.println(a.toString());
。
数组的toString()
方法并不是特别有用,所以通过System.out.println(maze)
,你不会看到任何信息。
幸运的是,Arrays
类具有帮助方法,可以将您的问题减少到单行。尝试使用:
System.out.println(Arrays.deepToString(maze));
鉴于您的maze
是2d,您可以使用一些replaceAll调用来格式化它,就像您的帖子一样:
System.out.println(Arrays.deepToString(maze)
.replaceAll("],\\s\\[", "\n")
.replaceAll(",\\s|]|\\[", "")
);
答案 2 :(得分:1)
相反,使用随机值填充迷宫,您需要启动所有1
并填充随机路径,例如向北或向东走一段特定的长度。
就像您所拥有的循环一样,您也需要以这种方式打印它们。
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
System.out.print(maze[i][j]);
}
System.out.println();
}
答案 3 :(得分:0)
不是问题的答案,因为它已经得到了解答,但你怎么知道从哪里开始到哪里结束?
无论如何,我来到这里是为了引导你走向A *算法 - 它是一种路径寻找算法,对于这种类型的应用来说非常棒。
答案 4 :(得分:0)
我认为更好的解决方案是为迷宫创建一个对象:
public class Maze {
public Maze(final int[][] maze) {
this.maze = maze;
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
for (int i = 0; i < maze.length; i++) {
for (int j = 0; j < maze[i].length; j++) {
builder.append(maze[i][j]);
}
builder.append("\r\n");
}
return builder.toString();
}
private final int[][] maze;
}