2014-09-29 5 views
0

코드를 작성하려고하는데 Java가 이미 true 또는 false와 같은 값을 설정해야하는 임의 클래스를 사용하려고하지만 결과에 일정 비율의 영향을받습니다.확률로 임의의 부울 생성기

예를 들어, 누군가가 아플 때가 발생하면 무작위로 생성하는 메서드를 만들고 싶습니다. 비타민을 복용하는 경우 병의 가능성은 20 %입니다. 비타민을 복용하지 않으면 질병의 25 %가 발생합니다.

나는 약간의 연구를했고 API의 Random 클래스에는 무작위적인 부울 메서드가 있지만 사용해야합니까? 그렇다면 기회 비율을 어떻게 구현합니까?

나는 person 객체를 만들기 위해 테스트 클래스가 필요하다는 것을 알고 있으며, 어떻게 해야할지를 알고 있지만, 여기에는 내가 가진 것이있다. 여기에서 어디로 가야할지 모르겠다.

import java.util.Random; 

public class SicknessTest { 

    private boolean sickness; 
    private boolean vitamin; 

    public void takeVitamin() 
    { 
     vitamin = true; 
    } 

    public void getSick() 
    { 

    } 

} 

답변

0

대상의 비율을 알고있는 경우가 < (35)의 경우, 예를 들어, 사실 35 %의 확률로, 그때 그때 사실, 0에서 99 사이의 임의의 정수를 생성합니다. 그렇지 않으면 거짓입니다.

+0

좋습니다. 테스트 해 보겠습니다. 감사합니다. –

+0

nextDouble()을 사용하는 것보다 덜 바람직하다고 생각합니다. 예를 들어, 이렇게하면 100 억에서 확률 1로 무언가를합니까? Int가 오버플로됩니다. –

+0

한편, 정수 비율이 좋으면 오히려 부동 소수점 연산의 고유 한 부정확성을 피할 수 있습니다. 상한이 결과 범위의 일부가 아니므로'rnd.nextInt (100)'을 호출하고 싶을 것이다. – dimo414

2

double을 생성하고 비교할 값보다 큰지 확인하십시오. nextDouble()은 0과 1.0 사이의 값을 반환합니다.

Random rnd = new Random(); 

public void getSick() 
{ 
    if (vitamin) 
    sickness = rnd.nextDouble() <= 0.2; 
    else 
    sickness = rnd.nextDouble() <= 0.25; 
} 
+1

잘 작동하지만 nextDouble()을 사용하지 않는 이유는 무엇입니까? 극단적 인 경우에 비해 약간 더 정확합니다. –

+0

@SeanOwen이 동의했습니다. 몇 가지 빠른 벤치 마크를 실행하려고했지만 double 대신 float를 사용하는 정도를 명확하게 예측하지는 못했지만 테스트의 정확성을 향상시키는 것은 쉬운 방법입니다. – dimo414

+0

여기의 코드는'sickness = rnd.nextDouble() <= (vitamin? 0.2 : 0.25);'로 단순화 될 수 있습니다. – dimo414

관련 문제