如何在二维数组中随机选择一个位置放置一个字符串
我正在学习Java,并在基于网格的guessingGame项目上工作,我对loadtargetGrid()方法有一些困难。如何在二维数组中随机选择一个位置放置一个字符串
我有一个名为网格的字符串的二维数组,我想在六个随机选择的网格位置放置六个符号“X”。我希望对其他位置不做任何处理,并将它们默认保留为空。
public class Grid
{
public static final int ROWS = 5; // number of rows
public static final int COLUMNS = 5; // number of columns
public static final int NUMBER_OF_TARGETS = 6; // number of targets in the grid
private String[][] grid; // the grid itself, a 2-D array of String
private Random random; // random number generator
//Constructor
public Grid()
{
grid = new String[ROWS][COLUMNS];
random = new Random();
}
//method
public void loadTargetGrid()
{
int counter = 0;
while(counter < NUMBER_OF_TARGETS){
int randRow = random.nextInt(ROWS - 1);
int randColumn = random.nextInt(COLUMNS - 1);
grid[randRow][randColumn] = "X";
++ counter;
}
}
这就是我到目前为止。我试着用计数器的while循环在6个随机位置放置一个“X”。它编译,但我不知道这是否工作,我不知道如何检查我的代码是否正确。
你可能没有全部6个目标在网格上,因为你可以获得相同的点两次。试试这个:
int counter = 0;
while(counter < NUMBER_OF_TARGETS){
int randRow = random.nextInt(ROWS - 1);
int randColumn = random.nextInt(COLUMNS - 1);
if (grid[randRow][randColumn] == null) {
grid[randRow][randColumn] = "X";
++ counter;
}
}
谢谢,我没有想到这个。 – Poupen 2012-02-08 23:02:36
查看我对Louis Wasserman的评论。 – 2012-02-08 23:05:02
如果您不止一次获得相同的随机选择的坐标,则不会以NUMBER_OF_TARGETS个不同位置结束。你可能会尝试像
int randRow, randColumn;
do {
randRow = random.nextInt(ROWS);
randColumn = random.nextInt(COLUMNS);
} while (grid[randRow][randColumn] != null);
grid[randRow][randColumn] = "X";
谢谢!我还没有学习do..while的事情,但我会研究它。 – Poupen 2012-02-08 23:01:47
ROWS - 1和COLUMNS - 1不正确。 (我意识到你从OP复制这些)。 nextInt(n)的合约是它在半开范围[0..n)返回一个int。 – 2012-02-08 23:04:30
你不想从ROWS和COLUMNS中减去1。 nextInt方法已经将结果限制为0到ROWS-1或0到COLUMNS-1。您收到的任一答案都可以让您避免重复的地点。 – 2012-02-08 23:06:44
没错!我认为nextInt(int n)方法将从0到n值,但是n值是唯一的。感谢您的支持 – Poupen 2012-02-08 23:20:35