Java循环和随机数

时间:2014-01-31 00:12:06

标签: java

嗨我在循环中使用随机数时遇到了一些问题。

 private void SetMines()
    {
        Random randRowGen = new Random();
        Random randColGen = new Random();
        int mineCount = 0;
        int numMines = (ROWS * COLUMNS)* (int)0.156;
        while(mineCount <= numMines)
        {
            int randRow = randRowGen.nextInt(ROWS)+1;
            int randCol = randColGen.nextInt(COLUMNS)+1;
            grid[randRow][randCol] = new Character('*');
            mineCount++;
        }

    }

这是我的方法,它通过25 * 25的数组大小并挑选随机点并在那里放置“地雷”。唯一的问题是它只选择一个地点放置一个“地雷”,它需要在随机地点放置97个地雷。

任何帮助将不胜感激!!

3 个答案:

答案 0 :(得分:4)

您的numMines计算将始终返回0,因为当您将double小于1投射到int时,它将被设置到0,这意味着你的while循环中的语句只会运行一次,因此只放置一个地雷。

答案 1 :(得分:3)

问题不是随机问题,而是int numMines = (ROWS * COLUMNS)* (int)0.156;。你检查过那个价值了吗?它为0,因为(int)0.156等于0.

也许你想要int numMines = (int) ((double) 0.156 * ROWS * COLUMNS);。整数数学的问题在于你可能会失去很多精度。

答案 2 :(得分:0)

让你的计算机受损并使其掉落所有这些地雷。

记住。 “计算”的定义是“强迫机器做一个别人不想做的无聊工作”: - )

public static void main(String[] args) {

    int rows = 25;
    int cols = 25;

    boolean[][] mines = new boolean[rows][cols];

    while(mineCount(mines) < 97){
        dropMine(mines);
    }

    for(int i=0;i<rows;i++){
        for(int j=0;j<cols;j++){
            System.out.print("[");
            if (mines[i][j]){
                System.out.print("*");
            }else{
                System.out.print(" ");
            }
            System.out.print("] ");
        }
        System.out.println();
    }


}

private static void dropMine(boolean[][] mines) {
    int x = (int)(Math.random()*25);
    int y = (int)(Math.random()*25);
    mines[x][y] = true;
}

private static int mineCount(boolean[][] mines) {
    int count = 0;
    for(int i=0;i<25;i++){
        for(int j=0;j<25;j++){
            if (mines[i][j]){
                count++;
            }
        }
    }
    return count;
}