所以我基本上创建了一种环形投掷应用程序。我创建了一个二维数组," Game Board"如你所愿,每次运行程序时,在随机位置填充十五个奖品。然后,我要生成好像somone在索引处抛出十个戒指并标记它落在哪里,如果它落在奖品上,如果它不是你当然不会获得任何奖品,那么你将得到奖品。
在这里,我在制作所有15个奖项时遇到了麻烦...我可以在棋盘上打印一些奖品,但它永远不会出现在15 ...
这是在随机索引中设置奖品的类" array"是我的二维数组,奖品是一个包含奖品清单的ArrayList ......
public static void setPrizes() {
for (int i = 0; i <= 15; i++) {
row = (int) (Math.random() * 5);
col = (int) (Math.random() * 5);
prizes.add("puzzle");
prizes.add("ball");
prizes.add("cash");
item = prizes.get(0 + (int) (Math.random() * 3));
if(array[row][col].equals(" ")){
array[row][col] = item;
}else{
inp = prizes.get(0 + (int) (Math.random() * 3));
array[row][col] = item;
}
}
}
我无法理解为什么if语句不会意识到奖品已经放在那里。
我这样生成了我的董事会......
public static String[][] genBoard() {
for (int row = 0; row < array.length; row++) {
for (int col = 0; col < array[0].length; col++) {
array[row][col] = " ";
}
}
return array;
}
奖金生成后董事会......
public static void prizeBoard() {
System.out.println("The Board");
for (int row = 0; row < array.length; row++) {
for (int col = 0; col < array[0].length; col++) {
System.out.print("[" + array[row][col] + "]");
}
System.out.println();
}
}
答案 0 :(得分:1)
你似乎有一些错误:
首先,您使用双随机然后舍入。更好的是使用单个Random
对象和nextInt
方法。
其次,您的for循环使用<=
而不是<
,因此它将被调用16次而不是15次。
第三,在每次迭代中,您生成一个位置,然后将项目存储在那里,无论它是否已经存在 - 您的if
语句的两个分支都指定item
到该位置。每当您生成重叠时,您只会覆盖当前项目。
第四,你在每次迭代中都会增加3个新奖品。理想情况下,代码将在构造函数中,但至少将它放在循环之外。
考虑到所有这些因素,你会得到:
Random rand = new Random();
List<String> prizes = Arrays.asList("puzzle", "ball", "cash");
int itemCount = 0;
while (itemCount < 15) {
row = rand.nextInt(5);
col = rand.nextInt(5);
if (!array[row][col].equals(" ")) {
array[row][col] = prizes.get(rand.nextInt(prizes.size()));
itemCount++;
}
}