gpt4 book ai didi

java - 将唯一的随机点添加到数组中

转载 作者:行者123 更新时间:2023-12-01 10:36:38 26 4
gpt4 key购买 nike

我正在尝试用 Java 编写扫雷程序。我目前正在尝试创建 x 数量的独特地雷,其位置(作为 POINTS,其中 x 对应于 JavaFX 的行,y 对应于列)保存在一维数组中。这样我就可以将列表返回给 Controller 。

我可以开始:

  • 创建所有点,将它们添加到数组中,与每个其他点测试每个点,用新点覆盖 double ,再次测试...但这看起来非常不优雅。
到目前为止,我的问题是,当我测试刚刚创建的点是否与 Mines[] 数组中的每个点 .equal() 时,它会抛出异常,因为数组为空。

这个新解决方案是我迄今为止想到的最好的解决方案,但仍然有问题。无论是使用当前代码的一些指针还是更优雅的方法都会很棒!

感谢您的帮助

MineNumber = mines;
Mheight = height;
Mwidth = width;
int row;
int column;
int counter = 0;
Point[] Mines = new Point[MineNumber]; //5
Random Rnd = new Random();
boolean create=true;

不知道为什么它只适用于-1,但经过一些尝试后它至少可以运行

do {
if (counter < MineNumber - 1) {
row = Rnd.nextInt(Mwidth);
column = Rnd.nextInt(Mheight);
Point p = new Point(row, column);
System.out.println(p); //test

if (counter <= 0) {
Mines[0] = p;
counter++;
} else {
for (int i = 0;i < counter; i++) {
if (Mines[i].equals(p)) {
break;
} else {
Mines[counter] = p;
counter++;
}
}
}
} else {
create = false;
}
} while (create);
System.out.println(Mines[0] + " " + Mines[1] + " " + Mines[2] + " "
+ Mines[3] + " " + Mines[4]);

}

Output:
java.awt.Point[x=3,y=2]
java.awt.Point[x=1,y=8]
java.awt.Point[x=9,y=12]

java.awt.Point[x=3,y=2] java.awt.Point[x=1,y=8] java.awt.Point[x=9,y=12] java.awt.Point[x=9,y=12] null

最佳答案

将已放置地雷的每个位置存储在一个集合中:

Set<Point> placedMines = new HashSet<>();

然后,您可以从 0 到我的编号进行循环,而无需更改索引,也无需遇到访问尚未设置的元素的问题。

您可以轻松检查:

Point p =  Point(row, column);
while (placedMines.contains(p)) {
// there is already a mine at that location, select a different one.
p = Point(Rnd.nextInt(Mwidth), Rnd.nextInt(Mheight));
}

关于java - 将唯一的随机点添加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com