检查二维数组索引是否为空,如果它不生成新索引

时间:2015-01-14 00:51:21

标签: java arrays multidimensional-array

所以我基本上创建了一种环形投掷应用程序。我创建了一个二维数组," 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();
    }

}

1 个答案:

答案 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++;
    }
}