この章では、最初にJava乱数を生成するいくつかの方法を説明し、その後、例を介してそれらを実証します。
大まかに言えば、Javaで乱数を生成する3つの方法があります。
(01)。 System.CurrentTimeMillis()を使用して、現在の時間の長いミリ秒数を取得します。
(02)。 Math.random()を介して0〜1の間の2倍の値を返します。
(03)。ランダムクラスを通じて乱数を生成します。これは、強力な機能を備えたプロのランダムツールクラスです。最初の方法は、system.currenttimemillis()を使用して乱数を取得します
system.currenttimemillis()を介して乱数を取得します。実際には、現在のミリ秒数を取得しています。これはタイプの長いです。それを使用する方法は次のとおりです。
最終的な長いl = system.currenttimemillis();
タイプintの整数を取得するには、上記の結果を型intに変換するだけです。たとえば、[0、100)の間に整数を取得します。この方法は次のとおりです。
final long l = system.currenttimemillis(); final int i =(int)(l%100);
2番目の方法では、math.random()を使用して乱数を取得します
Math.random()を使用して乱数を取得します。実際、0(包括的)と1(含まれていない)の間の二重値を返します。それを使用する方法は次のとおりです。
最終ダブルd = math.random();
タイプintの整数を取得するには、上記の結果を型intに変換するだけです。たとえば、[0、100)の間に整数を取得します。この方法は次のとおりです。
final double d = math.random(); final int i =(int)(d*100);
3番目のタイプはランダムクラスを使用して乱数を取得します
ランダムクラスを通して乱数を取得します。
それを使用する方法は次のとおりです。
(01)ランダムオブジェクトを作成します。次のように、ランダムオブジェクトを作成するには2つの方法があります。
ランダムランダム= new Random(); //デフォルトコンストラクターランダム= new Random(1000); //シード番号を指定する
(02)ランダムオブジェクトを介して乱数を取得します。ランダムサポートランダム値タイプ:Boolean、Byte、int、long、float、double。
たとえば、[0、100)の間に整数を取得します。この方法は次のとおりです。
int i2 = random.nextint(100);
ランダムの関数インターフェイス
//コンストラクター(i):新しい乱数ジェネレーターを作成します。 random()// constructor(ii):単一の長いシードを使用して新しい乱数ジェネレーターを作成します。 }次の方法では、それを使用して乱数ジェネレーターの状態を保存します。ランダム(長い種子)boolean nextboolean()//次の「ブール型」疑似ランダム数を返します。 void nextbytes(byte [] buf)//ランダムバイトを生成し、それらをバイト配列bufに配置します。 double nextdouble()//ランダムな数の「[0.0、1.0)の間のダブルタイプ」を返します。 float nextfloat()//ランダムな数の「[0.0、1.0)の間のフロートタイプ」を返します。 int nextint()//次の「intタイプ」乱数を返します。 int nextint(int n)//ランダムな数の「[0、n)の間のintタイプ」を返します。 long nextlong()//次の「長いタイプ」乱数を返します。同期された二重nextgaussian()//次の「二重型」乱数を返します。これは、平均値が0.0、標準偏差が1.0で、ガウス(「通常」)分布の二重値です。同期されたボイドセットシード(長い種子)//単一の長いシードを使用して、この乱数ジェネレーターの種子を設定します。
乱数の例を取得します
EG1:
以下は、乱数を取得する上記の3つの方法を示す例です。ソースコードは次のとおりです(randomtest.java):
Import java.util.random; Import java.lang.math;/*** Java乱数テストプログラム。乱数を取得するには3つの方法があります。 *(01)、System.CurrentTimemillis()を使用して、現在の時間に長いタイプのミリ秒を取得します。 *(02)、Math.random()から0と1の間の2倍の値を返します。 *(03)ランダムクラスを通じて乱数を生成します。これは、強力な機能を備えたプロのランダムツールクラスです。 * * @author skywang * @email [email protected] */public class randomtest {public static void main(string args []){// systemのcurrenttimemillis()を介してランダム数testystemtimemillis()を返します。 //乱数testmathrandom()をMathのランダム()から返します。 //「1000の種子」を持つ新しいランダムオブジェクトを作成し、このシードTestRandomapis(新しいランダム(1000)、「1st Random(1000)」を介してランダムAPIをテストします。 testrandomapis(新しいランダム(1000)、「2番目のランダム(1000)」); //「デフォルトのシード」ランダムオブジェクトを作成し、このシードTestRandomapis(new Random()、 "1st Random()")を介してランダムのAPIをテストします。 testrandomapis(new Random()、 "2nd random()"); } / ** *乱数を返します-01:Test SystemのcurrentTimemillis() * / private static void testsystemtimemillis(){// final long l = system.currenttimemillis(); // [0、整数final int i =(int)(l%100)を取得します。 System.out.printf( "/n ---- System.currenttimemillis()---/nl =%si =%s/n"、l、i); } / ** *ランダム数を返してください-02:Mathのランダム() * / private static void testmathrandom(){// Mathのランダム()関数を使用して二重型ランダム数を返します。 // [0、100)final int i =(int)(d*100)の間に整数を取得します。 system.out.printf( "/n ----- Math.random()---/nd =%si =%s/n"、d、i); } / ** * return random数-03:test random's api * / private static void testrandomapis(ランダム、文字列タイトル){final int buffer_len = 5; //ランダムブール値を取得しますboolean b = random.nextboolean(); //ランダム配列buf [] byte [] buf = new byte [buffer_len]; random.nextbytes(buf); //ランダムダブル値、範囲[0.0、1.0)double d = random.nextdouble()を取得します。 //ランダムフロート値を取得します、範囲[0.0、1.0)float f = random.nextfloat(); //ランダムint値を取得int i1 = random.nextint(); // [0,100)int i2 = random.nextint(100)の間でランダムなint値を取得します。 //ランダムガウス分布を取得しますdouble g = random.nextgaussian(); //ランダムな長い値を取得しますl = random.nextlong(); System.out.printf( "/n ---%s ----/nb =%s、d =%s、f =%s、i1 =%s、i2 =%s、g =%s、l =%s、buf = ["、title、b、d、f、i1、i2、g、l); for(byte bt:buf)system.out.printf( "%s、"、bt); System.out.println( "]"); }}
EG2:
問題:小数点後に2桁が保持されている(-10,10)の間に乱数を生成します。
解決:
1。乱数生成関数ランダムr = new Random(); r.nextfloat(); //(0,1)の間に浮動小数点乱数を生成します。上記の乱数に10を掛けて、(0,10)の間の乱数を取得します。
2。ブール型の乱数を生成して、数の正と負を制御する:r.nextboolean();
3。2つの小数点を保持する方法:Math.Floor(n*100+0.5)/100。取得した数はダブルタイプです。
コードは次のとおりです。
Java.util。*をインポートします。 public class createrandom {public float numrandom(){float num;ランダムr = new Random(); float値=(float)(math.floor(r.nextfloat()*1000+0.5)/100); boolean b = r.nextboolean(); if(b){num = value; } else {num = 0-value; } numを返します。 } public static void main(string [] args){createrandom cr = new createrandom(); float num = cr.numrandom(); System.out.print(num); }}