当前位置: 首页 > 知识库问答 >
问题:

向二进制2d阵列添加20个1

锺功
2023-03-14

我正在创建一个寻路程序,我有一个2d整数数组,其中1表示可以通过/打开的障碍,0表示可以通过/打开。

起始网格如下:

int[][] map = {
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
                {0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
                {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        };

其起点为[0,0],终点为[9,9]。

我想创建一个方法,获取地图并在随机位置返回20个随机障碍物(1),但起点、终点和现有障碍物不能更改。

共有2个答案

池阳伯
2023-03-14

你可以这样做。这允许任何大小的矩形矩阵。

int[][] map = createMap(10, 10, 20);

for (int[] row : map) {
    System.out.println(Arrays.toString(row));
}

指纹

[0, 0, 1, 1, 0, 0, 1, 0, 1, 0]
[1, 0, 0, 1, 0, 0, 1, 0, 0, 1]
[0, 0, 1, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 1, 0, 0, 1, 0, 0, 0]
[1, 0, 0, 0, 1, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

方法

尽管从统计上讲,您可以填充所需的1,但不能通过多次调用随机x来保证。我根据提供的行和列长度返回地图时采取了一些自由。我认为这没问题,因为您只想保持第一个和最后一个位置无障碍。

  • 该方法采用行和列长度以及所需的obstaclecont

public static int[][] createMap(int row, int col,
        int obstacleCount) {
    if (obstacleCount > row * col - 2) {
        throw new IllegalArgumentException(
                "Map too small for obstacles");
    }
    
    List<Integer> temp =new ArrayList<>();
    for( int i = 0; i < row*col; i++) {
        temp.add(i > 0 && i <= obstacleCount ? 1 : 0);
    }

    Collections.shuffle(temp.subList(1, temp.size() - 1));
    int[][] map = new int[row][col];
    int start = 0;
    for (int[] mapRow : map) {
        for (int r = 0; r < row; r++) {
            mapRow[r] = temp.get(start++);
        }
    }
    return map;
    
}

沈良策
2023-03-14

你有很多选择怎么做。您可以这样准备:

html lang-html prettyprint-override">public class HelloWorld{

     public static void main(String []args){
         Random random = new Random();
         int[][] map = new int[10][10];//you can user your existing array
         map[0][0] = 1;
         map[9][9] = 1;
        
         int counter = 20;
         while (counter > 0){
             int x = random.nextInt(9); 
             int y = random.nextInt(9);
             if(map[x][y] != 1){
                 System.out.println(x + " " + y);
                 map[x][y]=1;
                 counter--;
             }
         }
         
        map[0][0] = 0;
        map[9][9] = 0;
     }
}
 类似资料:
  • 我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素

  • 这是我第一次使用 GUI。我似乎无法用它来操纵我的头脑。我觉得答案很简单(我对此感到抱歉),但我只是无法把它记进我的脑海里。:/ 我有一个2D JLabel数组,每个数组都设置为一个默认的板ImageCon。我在每列上方都有指定列号的按钮。在actionPerformed方法中,我为每个按钮设置了以下内容: 我不知道如何将令牌添加到指定令牌的最低行,我想在我找到设置为ImageIcon p0的最低

  • 问题内容: 我有一个像这样的3D矩阵 并希望将它们以网格格式堆叠,最后得到 有没有一种方法,而无需明确地对其进行hstacking(和/或vstacking)或添加额外的维度并重塑(不确定这样做是否可行)? 谢谢, 问题答案: In [27]: x = np.arange(16).reshape((4,2,2)) 我在这里发布了用于将数组重塑/取消塑形的更多常规功能。

  • 问题内容: 我正在自学一些Java,并且坚持创建2D数组,该数组使用随机值对其进行初始化,然后创建该数组的转置。 示例输出为: 原始矩阵 转置矩阵 ^应该是最终输出。代码的一些帮助将不胜感激! 如果行或列的数量超出指定范围,我想编写代码以生成错误消息。以及是否从命令行读取矩阵元素而不是随机生成它们。 问题答案: 这是返回转置矩阵的int [] []的简单方法… 比起打印二维矩阵,您可以使用如下方法

  • 问题内容: 我想在Go中排序一个二维数组。谁能建议我该怎么做? 例如,如果我有, 然后有类似的东西, 问题答案: 您必须定义自己如何对这种类型进行排序。您可以创建必要的方法来使用该 接口,并根据需要使用指针来更改数组值: https //play.golang.org/p/thdf-k2k3o 或使用该 函数,转换 为切片并提供适当的较少函数: https //play.golang.org/p/

  • 我有一个带有二维数组的Java代码,我想重写这段代码,看起来它的代码比我以前写的要少。 我的代码的主要任务是在1中包含立方体。 有没有办法解决这个问题? 我的数据: 我的代码: