繁体   English   中英

使用特定和随机整数/字符填充2D数组

[英]Filling a 2D array with specific and random integers / chars

我必须创建一个要打印的2D数组,但是我在努力包含所有特定细节方面都在努力。 我通过用户输入获得了行数和列数,然后必须打印一个数组,该数组的左上角为“ S”,右下角为“ D”,并填充有随机的“#”和随机数。 在[1,100](含)范围内随机产生数字,而“#”的总数不能超过矩阵总大小的1/3。

但是,我很困惑,不知道我的代码在哪里...

码:

public void drawMaze(int numRows, int numCols) {

    int[][] mazeArray = new int[numRows][numCols];
    Random  random = new Random(); 

    // Starting Point
    mazeArray[0][0] = "S";
    // Destination Point
    mazeArray[numRows][numCols] = "D";

    for (int i = 0; i < mazeArray.length; i++) {
        for (int j = 0; j < mazeArray[i].length; j++) {
            mazeArray[i][j] = (int)(Math.random()*10);
        }
    }

}

帮助将不胜感激!

可能是这样的:

public void drawMaze(int numRows, int numCols) {
    String[][] mazeArray = new String[numRows][numCols];
    Random random = new Random();
    for (int i = 0; i < mazeArray.length; i++) {
        for (int j = 0; j < mazeArray[i].length; j++) {
            int result = 1 + random.nextInt(200);
            if (result > 100) {
                mazeArray[i][j] = "#";
            } else {
                mazeArray[i][j] = Integer.toString(result);
            }
        }
    }
    //starting point
    mazeArray[0][0] = "S";
    //destination point
    mazeArray[numRows-1][numCols-1] = "D";
    for (int i = 0; i < mazeArray.length; i++) {
        for (int j = 0; j < mazeArray[i].length; j++) {
            System.out.print(String.format("%4s", mazeArray[i][j]));
        }
        System.out.println();
    }
}

200只是一个硬编码的值。 您可以使其依赖于方法的参数。
System.out.print(String.format("%4s", mazeArray[i][j])); 负责间距(当然可以更改为另一个整数)。

您不应该一个一个接一个地去。 更好的方法可能是随机填充字段,而将1/3的字段留空以填充#。

  • 用“#”填充完整的数组(mazeArray)
  • 计算整个字段以填充数字(numRows * numCols * 2/3)= maxFields
  • 设置一维数组(fieldsToFill),其中0填充到maxFields,递增
  • 现在,随机选择多个fieldsToFill并将其填充在2-dim数组mazeArray中,然后从fieldsToFill中删除该元素

这样,您的迷宫就会变得更加随机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM