私はこれをします:
double halfX= x / 2.0;
double random = Math.random() * x;
if( random< halfX ) {
random = random*5.0/(halfX);
} else {
random = (random/halfX - 1) * (x-5.0) + 5.0 ;
}
今はいいと思います。これは理解しにくく読みやすいですが、呼び出しごとにランダムへの呼び出しは1つだけです。MarkoTopolnicが指摘した事実とは別に、ユーザーには整数が必要でした...私は四捨五入が分布にどのように作用するかを計算する必要があります。
これは絶対に簡単ではありません...私の頭が痛むので、私が思いつくことができる最高のもの:
double halfX= x / 2.0 + 1.0;
double random = Math.random() * (x+2.0);
int randomInt;
if( random< halfX ) {
randomInt = (int) (random*6.0/(halfX)); //truncating, means equal distribution from 0-5
} else {
randomInt = (int) ((random/halfX - 1.0) * (x-5.0) + 6.0) ; //notice x-5.0, this range before truncation is actually from 6.0 to x+1.0, after truncating it gets to [6;x], as this is integer
}
第二部はわかりませんが...数時間の睡眠でうまくいくでしょう...意図と論理が明確であることを願っています...