【问题标题】:How do I populate a three-dimensional array with randomly placed predefined integers?如何使用随机放置的预定义整数填充三维数组?
【发布时间】:2021-10-08 01:16:39
【问题描述】:

我是编程新手,我有一个 Java 作业,要求用户导航一个 10X10X10 的立方体迷宫,其中必须随机生成 500 个怪物、499 个开放单元和 1 个宝箱。宝箱也必须随机生成,但不能与怪物出现在同一地点。我必须编写的程序要求用户输入来检查数组中的一个单元格,看看它是否是百宝箱。如果单元格是空的,我必须提示宝箱在哪里(有多少个单元格以及您是否在同一行、同一列或同一页中)。用户尝试了三次寻找宝箱。在三次尝试结束时,或者如果他们击中了怪物,则用户输了,并被告知箱子放在哪个牢房中。就分配而言,空单元格 = 0,唯一有宝箱的单元格 = 1,怪物单元格 = 2。

我无法填充只有 500 个怪物和一个箱子的单元格。我下面的代码用随机数量的 0、1 和 2 填充所有单元格。我需要将 2 限制为 500 个实例,将 1 限制为一个实例(并事先检查以确保牢房中没有怪物),其余的保持 0。我还需要确保我不是用不止一个怪物填充同一个单元格。这是据我所知:

import java.util.Random;

public class FindTheCheese 
{  

   public static void main(String args[ ]) 
   {
          
      int size = 10;
      int[][][] maze = new int[10][10][10];
      Random gen = new Random();
      
      for(int i = 0; i < 10; i++){
         for(int j = 0; j < 10; j++) {
            for(int k = 0; k <10; k++) {
               maze[i][j][k] = gen.nextInt(3);
               System.out.print(maze[i][j][k] + ", "); // this won't be part of the final code, just used to check if I'm populating correctly
            }
            System.out.println();
         }
      }

        
   }//closing main
   
}//closing class FindTheCheese

【问题讨论】:

  • 您需要在每次创建怪物或箱子时跟踪循环内的计数器
  • 分离任务。 1) 创建一个空的 10 x 10 x 10 迷宫。创建将所有值设置为零。 2)随机放置宝箱。 3)随机放置500个怪物,检查你的随机位置是否已经包含宝箱或怪物。
  • 它必须有 500 个怪物还是最多可以有 500 个怪物?随机选择数字会导致不添加怪物。
  • 它必须恰好有 1 个宝箱,并且必须有 500 个怪物。

标签: java multidimensional-array random


【解决方案1】:
  1. 创建一个长度为 1000 的一维数组来保存要进入迷宫的所有值。将 500 个元素设置为 2(怪物),将 1 个元素设置为 1(宝箱),将 499 个元素设置为 0(空闲细胞)。
  2. 使用Collections.shuffle(Arrays.asList(yourOneDimArray)) 随机排列数组。
  3. 现在将洗牌数组中的值依次填充到您的 3 维矩阵中。当你遇到箱子时,在迷宫中记录它的坐标。您将需要此信息向用户报告。

【讨论】:

    【解决方案2】:

    当您第一次创建迷宫时,所有单元格默认为零。接下来,将单个宝藏添加到随机位置。最后,随机选择一个单元格,看看它是否为空。如果不是,请选择另一个随机单元格。如果是,放置一个怪物。用 for 循环重复 500 次:

      public static void main(String[] args) {
        int size = 10;
        int[][][] maze = new int[10][10][10]; // every cell is zero by default!
        Random gen = new Random();
        
        // place the treasure
        maze[gen.nextInt(size)][gen.nextInt(size)][gen.nextInt(size)] = 1;
    
        // place 500 monsters
        for(int monsters = 1; monsters <= 500; monsters++) {
          int i, j, k;
          do {
            i = gen.nextInt(size);
            j = gen.nextInt(size);
            k = gen.nextInt(size);
          } while (maze[i][j][k] != 0);
          maze[i][j][k] = 2;
        }
    
        // display the results
        for(int i = 0; i < size; i++){
            for(int j = 0; j < size; j++) {
              for(int k = 0; k < size; k++) {
                  System.out.print(maze[i][j][k] + " ");
              }
              System.out.println();
            }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2012-07-27
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      相关资源
      最近更新 更多