重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1. 优先:如果数字是保证永不重复,这不是很随机的。 第二:有很多的PRNG算法。 更新: 第三:有一个IETF的RFC的UUID(什么MS调用的GUID),但你应该认识到,(U|G)的UID不加密保护,如果这是你的关注。 更新2: 如果你想喜欢这种在生产代码(不只是为自己的熏陶),请使用预先存在的库。这是代码的那种几乎保证有微妙的bugs,如果你之前(或者即使你有)从来没有做过。 更新3: 下面是文档的.NET的GUID
目前创新互联已为1000+的企业提供了网站建设、域名、虚拟空间、绵阳服务器托管、企业网站设计、京山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
2. 有很多方法可以生成随机数。这是一个系统/库调用一个伪随机数发生器的seed照你已经描述。 但是 CodeGo.net,也有越来越随机数的其他方式涉及专门的硬件来获得真正的随机数。我知道扑克网站这种硬件的。这是非常有趣的阅读他们是如何做到这一点。
3. 大多数随机数发生器有办法“随机”重新初始化seed值。 (称为随机化)。 如果这是不可能的,你可以将系统时钟初始化seed。
4. 你这个代码示例: 或者,您这本书: 但是,不要自己动手,用现有的库。你不能成为优先人做到这一点。
5. 特别是关于Java的:java.util.Random使用线性同余发生器,这不是很好java.util.UUID#randomUUID()用途java.security.SecureRandom,适用于各种加密安全随机数据生成器的界面-默认是基于SHA-1的,我相信。 的UUID / GUID是不一定随机 人们很容易找到那些比好得多的RNG的java.util.Random如Mersenne扭曲或乘用携带
6. 我知道你正在寻找一种方法来生成随机的C#。如果是的话,RNGCryptoServiceProvider的是你在找什么。 [编辑] 如果产生一个相当长的RNGCryptoServiceProvider的数目,它很可能是唯一的,但不存在供货保证。从理论上讲,真正的随机数是唯一的。你滚骰子2,你可能会得到两个头的,但他们仍然是随机的。真正的随机! 我想申请的是unique的支票,你只需要保持滚动生成的数字历史你了。
const NUM int = 100
for i := 0; i NUM; i += 1 {
rand.Seed(int64(i))
fmt.Printf("%d\t", rand.Int63n(int64(NUM)))
}
其实在循环里面这点时间间隔,纳秒也是跟不上的。
还有,你用sleep的方法肯定是不能接受的!!!
#include stdio.h
#include stdlib.h
#include time.h //用到了time函数
int main()
{ int i,number;
srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
for (i=0; i50; i++)
{
number = rand() % 101; //产生0-100的随机数
printf("%d ", number);
}
return 0;
}
math/rand 中的所有整数函数都生成非负数.
示例 main.go
执行
同理,需要int64 int32类型的随机数只要修改随机函数
但是需要注意 math/rand 几个函数的取值区间!如Intn的范围[0, n)。[0,20),20会取不到
我自己的需求这样写已足够
在Java的API帮助文档中,Random函数功能的描述:
1、java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字;
2、相同种子数的Random对象,相同次数生成的随机数字是完全相同的;
3、Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率均等。
扩展资料:
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
语言特点:
1.简单性:
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。
因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
2.面向对象:
Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。
在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
3.分布性:
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
4.编译和解释性:
Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。
在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。
参考资料:百度百科-java