有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 2维1和0数组

我需要创建一个由10组成的随机迷宫,它不一定要能够求解。我正在编写的程序需要能够在这个迷宫中搜索,并告诉我是否有可能从头到尾0可以穿过,但是{}就像墙一样。目前我正在尝试创建随机数组,目前我已经编译了,但是它返回:[[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

我似乎不明白为什么这样的事情不起作用


共 (5) 个答案

  1. # 1 楼答案

    不是你问题的答案,因为它已经得到了回答,而是你如何知道从哪里开始,从哪里结束

    不管怎样,我来这里是为了指导大家使用A*算法——这是一种路径查找算法,对于这种类型的应用来说非常好

  2. # 2 楼答案

    相反,你需要用随机值填充迷宫,你需要从所有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. # 3 楼答案

    我认为更好的解决方案是为迷宫创建一个对象:

    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;
    }
    
  4. # 4 楼答案

    问题是数组的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');
    }
    
  5. # 5 楼答案

    打印像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|]|\\[", "")
        );