2014-01-31 118 views
0

嗨我在循環內部使用隨機數有一些問題。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個地雷。

任何幫助將不勝感激謝謝!

+0

不清楚你在問什麼,但是我想請你檢查一下' int numMines =(ROWS * COLUMNS)*(int)0.156;' –

+0

'(ROWS * COLUMNS)*(int)0.156的結果是什麼? –

+2

'(int)0.156'的結果是什麼? – rgettman

回答

3

問題不是隨機的,而是int numMines = (ROWS * COLUMNS)* (int)0.156;。你有沒有檢查過這個值?它是0,因爲(int)0.156等於0.

也許你想要int numMines = (int) ((double) 0.156 * ROWS * COLUMNS);。整數數學的問題是,你可能會失去很多精度。

+4

其實我認爲這是零... – alfasin

+1

@alfasin'(int)0.156'是非常該死的接近零是不是。 –

+0

@ user2310289試試這個:'System.out.println((int)0.156);' – alfasin

4

numMines計算將總是返回0,因爲當你施放double小於1int,它將被設置爲0,這意味着你的while循環語句將只運行一個單一時間,因此只有一個礦井被放置。

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; 
}