2014-01-31 2 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;입니다. 그 가치가 무엇인지 확인 했습니까? (int) 0.156이 0이기 때문에 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

당신이 당신의 while 루프의 문은 단 하나의 시간이 실행됩니다 것을 의미 int1 미만이 0로 설정됩니다있는 double을 시전 할 때 때문에 귀하의 numMines 계산이 항상 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; 
}