用特定和随机的整数/字符填充二维数组
Filling a 2D array with specific and random integers / chars
我必须创建一个打印出来的二维数组,但我正在努力尝试包含所有具体细节。我通过用户输入获得了行数和列数,然后必须打印一个数组,左上角为 "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]));
中的4负责间距(当然可以换成其他整数)。
你不应该一个接一个地去一个领域。更好的方法是随机填充字段,将 1/3 的字段留空以用 #.
填充
- 用“#”填充完整数组 (mazeArray)
- 计算您的总字段以填充数字 (numRows*numCols*2/3)=maxFields
- 设置一个一维数组(fieldsToFill)填充0到maxFields,递增
- 现在随机选择一些 fieldsToFill 并在 2-dim 数组 mazeArray 中填充该字段 pos 并从 fieldsToFill
中删除该元素
这样你可以更随机地填充迷宫。
我必须创建一个打印出来的二维数组,但我正在努力尝试包含所有具体细节。我通过用户输入获得了行数和列数,然后必须打印一个数组,左上角为 "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]));
中的4负责间距(当然可以换成其他整数)。
你不应该一个接一个地去一个领域。更好的方法是随机填充字段,将 1/3 的字段留空以用 #.
填充- 用“#”填充完整数组 (mazeArray)
- 计算您的总字段以填充数字 (numRows*numCols*2/3)=maxFields
- 设置一个一维数组(fieldsToFill)填充0到maxFields,递增
- 现在随机选择一些 fieldsToFill 并在 2-dim 数组 mazeArray 中填充该字段 pos 并从 fieldsToFill 中删除该元素
这样你可以更随机地填充迷宫。