2013-10-05 2 views
1
public void pickWinner() { 
     int last = list.size() - 1; 
     int number = (int)Math.random()*last; 
     System.out.println("And the winner is..."); 
     Student winner = list.get(number); 
     System.out.println(winner); 
} 

ArrayList의 첫 번째 항목 이외의 항목을 생성하는 데 문제가 있습니다. 내 ArrayList의 크기가 정확하기 때문에 Math.random()에 문제가 있다고 생각하지만 ArrayList의 첫 번째 항을 가져 오는 것만으로 0을 생성하는 것으로 보입니다. 이 문제를 해결하려면 어떻게해야합니까?arraylist의 크기를 사용하는 Math.random 범위

답변

4

이 시도 :

int number = (int)(Math.random()*last); 

문제는 당신이 그것을 곱 전에 INT에 인 Math.random 값을 캐스팅하고 있습니다. 캐스트의 연산자 우선 순위가 더 높습니다 (전체 목록은 http://introcs.cs.princeton.edu/java/11precedence/ 참조)

또한 코드에서 마지막 학생을 선택하지 않으므로 '마지막'int는 -1이 아니어야합니다.

무작위 클래스 (예 : new java.util.Random().nextInt(list.size());)를 사용하면 캐스트에 대해 걱정할 필요가 없으며 정수를 반올림하는 방법도 고려해 볼 수 있습니다. Random 인스턴스를 두 번 이상 사용해야하는 경우에도 Random 인스턴스를 다시 사용할 수 있습니다.

+0

당신에게 너무 감사 작동합니다. 이것은 완벽하게 작동합니다. 나는 내가 만든 바보 같은 실수를 알아 내려고 내 머리카락을 꺼내려고했다. – user1730357

1

Math.random()0.01.0 사이의 수를 생성합니다. 마지막으로 정수 변환을 수행하기 전에 임의의 숫자가 0으로 채워지고 결과는 항상 0이됩니다.

int number = (int)(Math.random()*last); 

제대로