JAva Math.random()nからmまでのランダム整数を生成
3774 ワード
JavaのMathクラスのrandom()メソッドでは、[0,1]間のランダム浮動小数点数を生成できます.doubleタイプのデータはintタイプに強制的に変換され、整数部分はintタイプの変数に割り当てられ、小数点以降の小数部分は失われます.
[0,n]のランダム整数を生成する場合は、Math.random()にn+1を乗じて[0,n+1]の浮動小数点数を生成し、強制型をint型に変換し、その整数部分だけを取るだけで[0,n]の整数を得ることができます.
各生成された乱数の確率をテストします.
実行結果:
この10個の数が生成する確率はほぼ一致し,各10%を占めることが分かった.
Randomクラスを使用して、nからmまでのランダムな整数を生成します.
random.nextInt(m)は、生成[0,m-1]間の乱数、すなわちrandom.nextInt(m+1)を表し、[0,m]間の乱数を生成する.
各生成の乱数確率をテスト
生成された[m,n]間のランダム整数の方法は,[0,n−m]のランダム整数になり,mを加えると[m,n]間のランダム整数が得られる.
[0,n]のランダム整数を生成する場合は、Math.random()にn+1を乗じて[0,n+1]の浮動小数点数を生成し、強制型をint型に変換し、その整数部分だけを取るだけで[0,n]の整数を得ることができます.
int b=(int)(Math.random()*10);// [0,9] 。
int temp=m+(int)(Math.random()*(n+1-m)); // m n [m,n]
各生成された乱数の確率をテストします.
public class TestMath
{
public static void main(String[] args)
{
int[] count=new int[10];
int base=1000000000;
int b;
for(int i=0;i 9)
{
break;
}
switch (b)
{
case 0:
count[0]++;
break;
case 1:
count[1]++;
break;
case 2:
count[2]++;
break;
case 3:
count[3]++;
break;
case 4:
count[4]++;
break;
case 5:
count[5]++;
break;
case 6:
count[6]++;
break;
case 7:
count[7]++;
break;
case 8:
count[8]++;
break;
case 9:
count[9]++;
break;
}
}
for(int i=0;i<10;i++)
{
double eachPercent= ((double)count[i]/base)*100;
System.out.println(i+": "+eachPercent+"%"+",");
}
}
}
実行結果:
0: 10.0005311%,
1: 10.0011356%,
2: 10.000164%,
3: 9.9996706%,
4: 9.999522800000001%,
5: 10.0005772%,
6: 10.0003636%,
7: 9.99965%,
8: 9.9987534%,
9: 9.9996317%,
この10個の数が生成する確率はほぼ一致し,各10%を占めることが分かった.
Randomクラスを使用して、nからmまでのランダムな整数を生成します.
import java.util.Random;
public class RandomTest
{
public static void main(String[] args)
{
int max = 20;
int min = 10;
Random random = new Random();
int s = random.nextInt(max) % (max - min + 1) + min;
System.out.println(s);
}
}
random.nextInt(m)は、生成[0,m-1]間の乱数、すなわちrandom.nextInt(m+1)を表し、[0,m]間の乱数を生成する.
各生成の乱数確率をテスト
import java.util.Random;
public class RandomTest
{
public static void main(String[] args)
{
int min = 0;
int max = 9;
Random random = new Random();
//random.nextInt(max+1) [0,max]
int[] count=new int[10];
int base=10000000;
int b;
for(int i=0;i 9)
{
break;
}
switch (b)
{
case 0:
count[0]++;
break;
case 1:
count[1]++;
break;
case 2:
count[2]++;
break;
case 3:
count[3]++;
break;
case 4:
count[4]++;
break;
case 5:
count[5]++;
break;
case 6:
count[6]++;
break;
case 7:
count[7]++;
break;
case 8:
count[8]++;
break;
case 9:
count[9]++;
break;
}
// System.out.println(b);
}
for(int i=0;i<10;i++)
{
double eachPercent= ((double)count[i]/base)*100;
System.out.println(i+": "+eachPercent+"%"+",");
}
}
}
結果:0: 10.01158%,
1: 9.99082%,
2: 10.0109%,
3: 10.00464%,
4: 9.99602%,
5: 9.991990000000001%,
6: 9.995560000000001%,
7: 9.998990000000001%,
8: 9.98683%,
9: 10.01267%,
生成された[m,n]間のランダム整数の方法は,[0,n−m]のランダム整数になり,mを加えると[m,n]間のランダム整数が得られる.