随机数的使用

一、通过java.lang.Math.random() 产生0=<x<1的数值

二、通过java.util.Random 产生 1.通过设置种子 每次运行产生的随机数一样
2.不通过设置种子 我认为每次默认加载的种子时间点不一样

三、在我们的System类中有一个currentTimeMillis()方法,这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long


import java.util.Random;
public class Random_test1{
public static void main(String[] args){

Random r=new Random(50);
for(int i=0;i<10;i++){
System.out.println(r.nextInt(50));
}
System.out.println("-------------------");
for(int i=0;i<10;i++){
//System.out.println(r.nextInt(50));
System.out.println((int)(Math.random()*100)+1);
}
}
}

结果是 通过random得到的随机数多次运行结果是一样的。
如果不设置参数的情况下结果是不一样的。
通过math的随机数运行结果也是不一样的
随机数也可以设定在字符之间,这样产生一个随机字符。
### 三级标题:C++中生成随机数的方法 C++11标准引入了随机数库,提供了更加灵活和高质量的随机数生成方式。该库主要包括两类组件:随机数引擎类和随机数分布类。随机数引擎用于生成随机数序列,而分布类则决定了随机数的分布形式,例如均匀分布或正态分布[^1]。 以下是一个使用`default_random_engine`和`uniform_int_distribution`生成指定范围内随机整数的示例代码: ```cpp #include <iostream> #include <random> int main() { std::random_device rd; // 用于生成随机种子 std::default_random_engine engine(rd()); // 使用默认随机数引擎 std::uniform_int_distribution<int> distribution(1, 100); // 生成1到100之间的整数 for (int i = 0; i < 10; ++i) { std::cout << distribution(engine) << std::endl; // 输出随机数 } return 0; } ``` 在上述代码中,`std::random_device`用于生成一个高质量的随机种子,`std::default_random_engine`是标准库提供的默认随机数生成器,而`std::uniform_int_distribution`用于确保生成的随机数在指定范围内呈现均匀分布[^2]。 ### 三级标题:替代方案与注意事项 - 若需要生成浮点数,可以使用`std::uniform_real_distribution<float>`来实现。 - `std::mt19937`是基于Mersenne Twister算法的随机数生成器,适用于大多数非加密场景。 - 为提高效率,应避免在循环中重复创建随机数引擎实例,建议复用同一个引擎对象。 - 在C++11之前,通常使用`rand()`函数结合`srand()`设置种子来生成随机数,但这种方式生成的随机数质量较低,不推荐用于对随机性要求较高的场景。 例如,使用`rand()`生成随机数的代码如下: ```cpp #include <iostream> #include <cstdlib> #include <ctime> int main() { std::srand(std::time(0)); // 设置随机种子 for (int i = 0; i < 10; ++i) { std::cout << std::rand() % 100 + 1 << std::endl; // 生成1到100之间的随机数 } return 0; } ``` 该方法虽然简单易用,但由于其随机性较差,建议仅在对随机性要求不高的场景中使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值