2014-01-31 2 views
0

Привет, У меня возникли проблемы с использованием случайных чисел внутри петель.Java Loops and Random numbers

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, который меньше, чем 1 к int, он будет установлен в 0, что означает, что оператор в цикле в то время как будет работать только один раз , следовательно, размещается только одна шахта.

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