Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串放置在二维数组中随机选择的位置_Java_Arrays_Random - Fatal编程技术网

Java 如何将字符串放置在二维数组中随机选择的位置

Java 如何将字符串放置在二维数组中随机选择的位置,java,arrays,random,Java,Arrays,Random,我正在学习Java,正在从事一个基于网格的猜谜游戏项目,我的loadtargetGrid()方法遇到了一些困难 我有一个名为Grid的2D字符串数组,我想在六个随机选择的网格位置放置六个符号“X”。我不想对其他位置执行任何操作,并在默认情况下将它们保留为null public class Grid { public static final int ROWS = 5; // number of rows public static final int COLUMNS

我正在学习Java,正在从事一个基于网格的猜谜游戏项目,我的loadtargetGrid()方法遇到了一些困难

我有一个名为Grid的2D字符串数组,我想在六个随机选择的网格位置放置六个符号“X”。我不想对其他位置执行任何操作,并在默认情况下将它们保留为null

    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;
      }
}
公共类网格
{
public static final int ROWS=5;//行数
公共静态final int COLUMNS=5;//列数
public static final int NUMBER_OF_TARGETS=6;//网格中的目标数
私有字符串[][]网格;//网格本身,字符串的二维数组
私有随机;//随机数生成器
//建造师
公共电网()
{
网格=新字符串[行][列];
随机=新随机();
}
//方法
public void loadTargetGrid()
{
int计数器=0;
while(计数器<目标数量){
int randRow=random.nextInt(行-1);
int randColumn=random.nextInt(列-1);
网格[randRow][randColumn]=“X”;
++计数器;
}
}

这就是我到目前为止所做的。我试着用一个带计数器的while循环来放置一个“X”在6个随机位置。它可以编译,但我不确定这是否有效,我不知道如何检查我的代码是否正确。

如果您多次获得相同的随机选择坐标,您将不会得到多个不同位置的目标。您可以尝试以下方法

int randRow, randColumn;
do {
  randRow = random.nextInt(ROWS);
  randColumn = random.nextInt(COLUMNS);
} while (grid[randRow][randColumn] != null);
grid[randRow][randColumn] = "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;
    }
}
int计数器=0;
while(计数器<目标数量){
int randRow=random.nextInt(行-1);
int randColumn=random.nextInt(列-1);
if(网格[randRow][randColumn]==null){
网格[randRow][randColumn]=“X”;
++计数器;
}
}

谢谢!我还没有学会do..while,但我会研究一下。行-1和列-1不正确。(我知道你是从OP复制的)。nextInt(n)的合同是它返回半开范围内的整数[0..n).您不想从行和列中减去1。nextInt方法已经将结果限制为0到行-1或0到列-1。您收到的任何一个答案都可以避免重复位置。没错!我以为nextInt(int n)方法会从0到n值,但n值是独占的。谢谢