一定の範囲内で最も頻繁にランダムに作成するが、

RaylessTiKi:

私は、人の収縮期血圧をシミュレートし、特定のタスクを作成する必要があるので、私はこれを試してみました:

rand = new Random();
timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {
    Integer sbp = rand.nextInt((130 - 80) + 1) + 80;
        lblSBPCounter.setText(Integer.toString(sbp));           
}
}, 1000, 120000);

問題は、それが、人が困っていること、90を下​​回るか、120以上になる場合は、収縮期血圧が90から120までの範囲を有することです。だから私は2分ごとに80から130に問題を乱数を生成しようとしたコード内でランダム関数は、範囲の下と上にかなり頻繁に行くことです。だから、私の質問は:私は、関数が90〜120以上の数字を生成し、90アンダー、120以上少ない数字にすることはできますか?1つの番号ごとに1〜2時間のように?

グレッグ司会:

あなたはRandom.nextGaussian()メソッドを使用する必要があります。私は、この例からの結果の0.3%未満が90未満であるか、又はそれはあなたの80〜130の範囲外にある場合120上に、私はまた、数を再生するためにピースを加え、平均値と標準偏差105及び10を選択しました。

rand = new Random();
timer = new Timer();
int mean = 105, standardDeviation = 5;
timer.schedule(new TimerTask() {

@Override
public void run() {
    Integer sbp;
    do
    {
        sbp = (int) Math.round((rand.nextGaussian() * standardDeviation) + mean);
    } 
    while(sbp < 80 || sbp > 130)

    lblSBPCounter.setText(Integer.toString(sbp));           
}
}, 1000, 120000);

あなた(またはこの質問渡って来て、誰かが)、標準偏差を選択する方法がわからない場合は、ルールは結果の68.27パーセントは、平均値の1つの標準偏差内に入るということです、結果の95.45パーセントは、2枚のSD内にあり、結果の99.73パーセントは、3枚のSDの範囲内です。

編集:私は恐らくMath.roundを含めるのを忘れて()と平均値と標準偏差を入れ替えていました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=315374&siteId=1