Math.random()和new Random()生成随机数

Java中Math类的random()方法可以生成[0,1)之间的随机浮点数。而double类型数据强制转换成int类型,整数部分赋值给int类型变量,小数点之后的小数部分将会丢失。

如果要生成[0,n]的随机整数的话,只需要Math.random()乘以n+1,生成[0,n+1)的浮点数,再强制类型转换为int类型,只取其整数部分,即可得到[0,n]的整数;new Random().nextInt(m)表示生成[0,m-1]之间的随机数,也就是说new Random().nextInt(m+1),将生成[0,m]之间的随机整数。

Math.ramdom() 和 new Random()生成[m,n]的随机整数:

(int)(Math.random()*m); //生成[0,m]之间的随机整数。
m+(int)(Math.random()*(n+1-m)); //生成从m到n的随机整数[m,n]

Random random = new Random();
random.nextInt(m+1); //生成[0,m]之间的随机整数。
m+random.nextInt(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<base;i++)
        { 
            //生成[0,9]
            b=(int)(Math.random()*10);
            if(b<0)
                break;
            if (b>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<base;i++)
        { 
            //生成[0,9]
//            b=(int)(Math.random()*10);
//                      random.nextInt(max+1-min) 生成[0,max-min]之间的随机整数,再加上min 即[min,max]
                        b=min+random.nextInt(max+1-min);
            if(b<0)
                break;
            if (b>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]之间的随机整数。

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,有两种不同的方式可以生成随机数:使用Math类的random()方法和使用java.util.Random类。 1. Math类的random()方法: Math类是Java内置的数学类,其中有一个静态方法random(),用于生成一个0到1之间的随机浮点数。具体使用方法如下: ```java double randomNum = Math.random(); // 生成一个0到1之间的随机浮点数 ``` 这个方法会返回一个大于等于0且小于1的伪随机浮点数。如果你需要生成其他范围的随机数,可以使用乘法和加法进行缩放和偏移。例如,如果你想生成一个0到100之间的随机整数,可以使用以下代码: ```java int randomInt = (int) (Math.random() * 101); // 生成一个0到100之间的随机整数 ``` 注意:使用Math类的random()方法生成的随机数是伪随机数,每次程序运行时都会生成相同的随机数序列。如果需要更高质量的随机数,可以考虑使用Random类。 2. Random类: Random类是Java提供的随机数生成器类,位于java.util包中。使用Random类可以生成各种类型的随机数,包括整数、浮点数、布尔值等。以下是一个使用Random类生成随机整数的示例: ```java import java.util.Random; // 创建Random对象 Random random = new Random(); // 生成一个0到100之间的随机整数 int randomInt = random.nextInt(101); // 打印随机整数 System.out.println(randomInt); ``` Random类的nextInt()方法用于生成一个指定范围内的随机整数。在上述示例中,nextInt(101)会生成一个0到100之间的随机整数。 总结:Math类的random()方法适用于简单的随机数生成需求,而Random类适用于更复杂的随机数生成需求,可以生成不同类型的随机数,并且具有更好的随机性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值