我正在制作一个简单的阵列板。我试图制作角色' $'在随机的地方出现10次,并且' R'在随机位置只出现一次。我继续改变随机化,但我知道我接近这个错误的方式。字符以随机数量显示在随机位置和中。
编辑:我忘了提到我正在尝试维护嵌套的for
循环。
编辑:我把我在代码中尝试的最后一句if语句放在了我的占位符上。
这是我的代码:
import java.util.*;
public class board
{
public static void main(String[] args)
{
char $;
char R;
char board[][] = new char[10][10];
for(int x = 0; x < board.length; x++)
{
for(int i = 0; i < board.length; i++)
{
double random = Math.random();
if(random >.01 && random <=.10)
{
board[x][i] = 'R';
}
else if(random > .01 && random <= .15)
{
board[x][i] = '$';
}
else {
board[x][i] = '.';
}
System.out.print(board[x][i] + " ");
}
System.out.println("");
}
}
}
答案 0 :(得分:1)
通过迭代所有位置并与概率进行比较,您不会得到随机放置。如果放置太多或不够,会发生什么?一个更好的算法是生成随机位置,直到你有足够的板。类似的东西:
while (count < target) {
int x = rand.getInt(size);
int y = rand.getInt(size);
if (board[x][y] == '.') {
board[x][y] = '$';
count++;
}
}
这将自动跳过已分配角色的位置,并将持续到足够的位置。
这可以作为用于两个展示位置的方法:
private void place(char toPlace, int target) {
int count = 0;
while (count < target) {
int x = rand.getInt(size);
int y = rand.getInt(size);
if (board[x][y] == '.') {
board[x][y] = toPlace;
count++;
}
}
}
place('M', 1);
place('$', 10);
答案 1 :(得分:0)
它会随机放置,但您没有控制生成数量的代码。你应该有一个$的计数器和一个R的计数器,当你有足够的时候,它就不应该打印那个角色了。此外,当前代码可以覆盖先前放置的字符。您应该添加一个if语句来检查即将被替换的地址的当前值,并确保它首先为空。