嗨我在循环中使用随机数时遇到了一些问题。
private void SetMines()
{
Random randRowGen = new Random();
Random randColGen = new Random();
int mineCount = 0;
int numMines = (ROWS * COLUMNS)* (int)0.156;
while(mineCount <= numMines)
{
int randRow = randRowGen.nextInt(ROWS)+1;
int randCol = randColGen.nextInt(COLUMNS)+1;
grid[randRow][randCol] = new Character('*');
mineCount++;
}
}
这是我的方法,它通过25 * 25的数组大小并挑选随机点并在那里放置“地雷”。唯一的问题是它只选择一个地点放置一个“地雷”,它需要在随机地点放置97个地雷。
任何帮助将不胜感激!!
答案 0 :(得分:4)
您的numMines
计算将始终返回0
,因为当您将double
小于1
投射到int
时,它将被设置到0
,这意味着你的while循环中的语句只会运行一次,因此只放置一个地雷。
答案 1 :(得分:3)
问题不是随机问题,而是int numMines = (ROWS * COLUMNS)* (int)0.156;
。你检查过那个价值了吗?它为0,因为(int)0.156等于0.
也许你想要int numMines = (int) ((double) 0.156 * ROWS * COLUMNS);
。整数数学的问题在于你可能会失去很多精度。
答案 2 :(得分:0)
让你的计算机受损并使其掉落所有这些地雷。
记住。 “计算”的定义是“强迫机器做一个别人不想做的无聊工作”: - )
public static void main(String[] args) {
int rows = 25;
int cols = 25;
boolean[][] mines = new boolean[rows][cols];
while(mineCount(mines) < 97){
dropMine(mines);
}
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
System.out.print("[");
if (mines[i][j]){
System.out.print("*");
}else{
System.out.print(" ");
}
System.out.print("] ");
}
System.out.println();
}
}
private static void dropMine(boolean[][] mines) {
int x = (int)(Math.random()*25);
int y = (int)(Math.random()*25);
mines[x][y] = true;
}
private static int mineCount(boolean[][] mines) {
int count = 0;
for(int i=0;i<25;i++){
for(int j=0;j<25;j++){
if (mines[i][j]){
count++;
}
}
}
return count;
}