JAvaは指定範囲の乱数を生成する(キックアスすぎる)

1580 ワード

指定範囲内の乱数を生成
これは最もよく使われる技術の一つです.プログラマは、多くのビジネスロジックを乱数で処理し、テスト中にも乱数で大量の数字を含むテスト例を生成したいと考えています.問題は次のようになります.
1~100の間の乱数をどのようにランダムに生成するかは、境界値1と100を含む.
または、
ランダムな3ビット整数をランダムに生成するにはどうすればいいですか?
待って...
Java言語を例に,RandomオブジェクトのnextInt(int)メソッドを観察したところ,0~パラメータ間のランダムな値の整数を生成することが分かった.例えば(Random rand=newRandom();,以下同):
rand.nextInt(100);
この行のコードは、0~100の範囲の乱数を生成します.興味深いことに、値は0である可能性がありますが、100である可能性はありません.私たちは中学校の数学の授業で勉強した区間表現法で,[0,100]と表現した.
では、区間[1~100]の乱数を得るには、どうすればいいのでしょうか.少し頭を働かせると、区間[0,100)内の整数は、実は区間[0,99]です.最大境界が100なので、残念ながら100に等しくないので、最大で発生する可能性のある「整数」は99です.
rand.nextInt(100)で得られた値が区間[0,99]である以上、この区間の左右に1ずつ加算すると区間が得られる[1,100].したがって、コードは、
rand.nextInt(100)+ 1;
はい.次のコードを実行すると、[1,100]の10個の値が得られます.
import java.util.Random;

public class Test {

public static void main(String[] args){

Random rand = new Random();

for(int i=0; i<10; i++) {

System.out.println(rand.nextInt(100) + 1);

}

 
同様に、ランダムな2つの整数を得るには、rand.nextInt(90)+10と書くコードが簡単にわかります.
驚くべきことに、なぜそう書いたのか.実はnextInt()メソッドでパラメータとしての数字90は、生成したい乱数のすべての値を取る可能性の数(本命題では、2桁の整数値は[10,99]、合計90の数)を表し、後ろの数字10を加えて区間の最小値を表す.
[1,100]の乱数はrand.nextInt(100)+1と書くべきかどうかを検証します.パラメータ100を最大値として理解しないでください.区間[1,100]はちょうど1から始まるので、最大値と値の可能性の数はちょうど100と同じです.
そのため、
ランダム3桁を生成するコードは次のとおりです.
rand.nextInt(900)+ 100;
区間[64128]のランダム値を生成するコードは、次のとおりです.
rand.nextInt(65)+ 64;
取値可能性の数はどのように計算されますか?もちろん最大取値-最小取値+1ですので、最終式は以下の通りです.
//For Java
int randNumber=rand.nextInt(MAX-MIN+1)+MIN;//randNumberは、MINとMAXの範囲内の乱数として割り当てられます