在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
java.util.Random b=new java.util.Random();。
因为你的类名跟Jdk自带的Random重复,导致优化引入你定义的Random,如果你想强制引用Jdk的Random需要使用包名.类型形式。
写法:inttemp=m+(int)(Math.random()*(n+1-m));//Java生成从m到n的随机整数[m,n]。
random(),函数,random函数返回一个0~num-1之间的随机数。random(num)是在stdlib.h中的一个宏定义。num和函数返回值都是整型数。
扩展资料:
注意
如需要在一个random()序列上生成真正意义的随机数,在执行其子序列时使用randomSeed()函数预设一个绝对的随机输入,例如在一个断开引脚上的analogRead()函数的返回值。
反之,有些时候伪随机数的精确重复也是有用的。这可以在一个随机系列开始前,通过调用一个使用固定数值的randomSeed()函数来完成。
java.util
类 Random
java.lang.Object。
java.util.Random。
所有已实现的接口:
Serializable
直接已知子类:
SecureRandom
--------------------------------------------------------------------------------。
public class Randomextends Objectimplements Serializable此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证属性的实现,为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。
Random 类所实现的算法使用一个 protected 实用工具方法,每次调用它都可提供最多 32 个伪随机生成的位。
很多应用程序会发现 Math 类中的 random 方法更易于使用。
从以下版本开始:
JDK1.0
另请参见:
Math.random(), 序列化表格。
--------------------------------------------------------------------------------。
构造方法摘要
Random()
创建一个新的随机数生成器。
Random(long seed) 。
使用单个 long 种子创建一个新随机数生成器: public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。
方法摘要
protected int next(int bits) 。
生成下一个伪随机数。
boolean nextBoolean() 。
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。
void nextBytes(byte[] bytes) 。
生成随机字节并将其置于用户提供的字节数组中。
double nextDouble() 。
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0之间均匀分布的 double 值。
float nextFloat() 。
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。
double nextGaussian() 。
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。
int nextInt() 。
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n) 。
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
long nextLong() 。
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。
void setSeed(long seed) 。
使用单个 long 种子设置此随机数生成器的种子。
从类 java.lang.Object 继承的方法 。
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 。
构造方法详细信息
Random
public Random()创建一个新的随机数生成器。此构造方法为随机数生成器的种子设置某个值,该值与此构造方法的所有其他调用所用的值完全不同。
--------------------------------------------------------------------------------。
Random
public Random(long seed)使用单个 long 种子创建一个新随机数生成器:
public Random(long seed) { setSeed(seed); }next 方法使用它来保存随机数生成器的状态。
参数:
seed - 初始种子。
另请参见:
setSeed(long)
方法详细信息
setSeed
public void setSeed(long seed)使用单个 long 种子设置此随机数生成器的种子。setSeed 的常规协定是它更改此随机数生成器对象的状态,使其状态好像是刚刚使用参数 seed 作为种子创建它的状态一样。Random 类按如下方式实现 setSeed 方法:
synchronized public void setSeed(long seed) {。
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);。
haveNextNextGaussian = false;。
}由 Random 类实现的 setSeed 恰好只使用 48 位的给定种子。但是,通常重写方法可能使用 long 参数的所有 64 位作为种子值。 注:尽管种子值是一个基本的 AtomicLong,但仍必须对此方法同步,确保 haveNextNextGaussian 的语义正确。
参数:
seed - 初始种子。
--------------------------------------------------------------------------------。
next
protected int next(int bits)生成下一个伪随机数。当此数被所有其他方法使用时,子类应该重写此数。
next 的常规协定是它返回一个 int 值,并且如果参数位处于 1 和 32(包括)之间,那么返回值的多数低位都将(大致)是单独选择的位值,每个位值是 0 或 1 的机会(大致)相等。Random 类按如下方式实现 next 方法:
synchronized protected int next(int bits) {。
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);。
return (int)(seed >>> (48 - bits));。
}这是一个线性同余伪随机数生成器,由 D. H. Lehmer 定义,Donald E. Knuth 在《The Art of Computer Programming, Volume 2: Seminumerical Algorithms》的第 3.2.1 节中进行了描述。
参数:
bits - 随机位。
返回:
随机数生成器序列的下一个伪随机值。
从以下版本开始:
JDK1.1
--------------------------------------------------------------------------------。
nextBytes
public void nextBytes(byte[] bytes)生成随机字节并将其置于用户提供的字节数组中。所生成的随机字节数等于该字节数组的长度。
参数:
bytes - 放入随机字节的非 null 字节数组。
从以下版本开始:
JDK1.1
--------------------------------------------------------------------------------。
nextInt
public int nextInt()返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。nextInt 的常规协定是伪随机地生成并返回一个 int 值。所有 232 个可能 int 值的生成概率(大致)相同。Random 类按如下方式实现 nextInt 方法:
public int nextInt() { return next(32); }。
返回:
下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
--------------------------------------------------------------------------------。
nextInt
public int nextInt(int n)返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。nextInt 的常规协定是伪随机地生成并返回指定范围中的一个 int 值。所有 n 个可能 int 值的生成概率(大致)相同。Random 类按如下方式实现 nextInt(int n) 方法:
public int nextInt(int n) {。
if (n<=0)。
throw new IllegalArgumentException("n must be positive");。
if ((n & -n) == n) // i.e., n is a power of 2。
return (int)((n * (long)next(31)) >> 31);。
int bits, val;。
do {
bits = next(31);。
val = bits % n;。
} while(bits - val + (n-1) < 0);。
return val;。
}
前面的描述中使用了不明确的词“大致”,只是因为 next 方法大致为一个单独选择位的公正来源。如果它是一个随机选择位的最佳来源,那么给出的算法应该从起始范围开始完全一致地选择 int 值。
但此算法稍微有些复杂。它拒绝那些会导致不均匀分布的值(由于 2^31 无法被 n 整除)。某个值被拒绝的概率取决于 n。最坏的情况是 n=2^30+1,拒绝的概率是 1/2,循环终止前的预计迭代次数是 2。
此算法特别对待 n 是 2 次幂的情况:它从基础的伪随机数生成器中返回正确的高位数。在不是特殊处理的情况中,将返回正确的低 位数。众所周知,线性同余伪随机数生成器(比如此类所实现的)在其低位的值序列中有 short periods。因此,如果 n 是 2 次幂(幂值较小),则这种特殊情况会导致对此方法的后续调用会返回其长度大大增加的值序列。
参数:
n - 所返回随机数的范围。必须为正数。
返回:
一个伪随机数,处于 0(包括)和 n(包括)之间均匀分布的 int 值。
抛出:
IllegalArgumentException - n 不是正数。
从以下版本开始:
1.2
--------------------------------------------------------------------------------。
nextLong
public long nextLong()返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。nextLong 的常规协定是伪随机地生成并返回一个 long 值。所有 264 个可能 long 值的生成概率(大致)相同。Random 类按如下方式实现 nextLong 方法: public long nextLong() { return ((long)next(32) << 32) + next(32); }。
返回:
下一个伪随机数,它是此随机数生成器的序列中均匀分布的 long 值。
--------------------------------------------------------------------------------。
nextBoolean
public boolean nextBoolean()返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。nextBoolean 的常规协定是伪随机地生成并返回一个 boolean 值。值 true 和 false 的生成概率(大致)相同。Random 类按如下方式实现 nextBoolean 方法:
public boolean nextBoolean() {return next(1) != 0;}。
返回:
下一个伪随机数,它是此随机数生成器的序列中均匀分布的 boolean 值。
从以下版本开始:
1.2
--------------------------------------------------------------------------------。
nextFloat
public float nextFloat()返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。
nextFloat 的常规协定是伪随机地生成并返回一个从 0.0f(包括)到 1.0f(包括)范围内均匀选择(大致)的 float 值。所有 224 个可能 float 值(其形式为 m x 2-24,其中 m 是一个小于 224 的正整数)的生成概率(大致)相同。Random 类按如下方式实现 nextFloat 方法:
public float nextFloat() {。
return next(24) / ((float)(1 << 24));。
}前面的描述中使用了不明确的词“大致”,只是因为 next 方法大致为一个单独选择位的公正来源。如果它是一个随机选择位的最佳来源,那么给出的算法应该从起始范围开始完全一致地选择 float 值。
[在 Java 的早期版本中,计算的结果是错误的,因为:
return next(30) / ((float)(1 << 30));这可能看似等效(如果不是更好的话),但实际上由于浮点数舍入中的偏差,它会导致轻微的不均匀性:有效数的低位更可能是 0 而不是 1。] 。
返回:
下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。
--------------------------------------------------------------------------------。
nextDouble
public double nextDouble()返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0之间均匀分布的 double 值。
nextDouble 的常规协定是伪随机地生成并返回一个从 0.0d(包括)到 1.0d(包括)范围内均匀选择(大致)的 double 值。所有 253 个可能 float 值(其形式为 m x 2-53,其中 m 是一个小于 253 的正整数)的生成概率(大致)相同。Random 类按如下方式实现 nextDouble 方法:
public double nextDouble() {。
return (((long)next(26) << 27) + next(27))。
/ (double)(1L << 53);。
}前面的描述中使用了不明确的词“大致”,只是因为 next 方法大致为一个单独选择位的公正来源。如果它是一个随机选择位的最佳来源,那么给出的算法应该从起始范围开始完全一致地选择 double 值。
[在 Java 的早期版本中,计算的结果是错误的,因为:
return (((long)next(27) << 27) + next(27))。
/ (double)(1L << 54);这可能看似等效(如果不是更好的话),但实际上由于浮点数舍入中的偏差,它会引入较大的不均匀性:有效数的低位可能出现的 0 是 1 的三倍!这种不均匀性在实践中可能没什么关系,但是我们应该争取完美。] 。
返回:
下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 double 值。
--------------------------------------------------------------------------------。
nextGaussian
public double nextGaussian()返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。
nextGaussian 的常规协定是伪随机地生成并返回一个 double 值,该值从(大致)从具有平均值 0.0 和标准偏差 1.0 的常规标准分布中选择。Random 类按如下方式实现 nextGaussian 方法:
synchronized public double nextGaussian() {。
if (haveNextNextGaussian) {。
haveNextNextGaussian = false;。
return nextNextGaussian;。
} else {
double v1, v2, s;。
do { 。
v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0。
v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0。
s = v1 * v1 + v2 * v2;。
} while (s >= 1 || s == 0);。
double multiplier = Math.sqrt(-2 * Math.log(s)/s);。
nextNextGaussian = v2 * multiplier;。
haveNextNextGaussian = true;。
return v1 * multiplier;。
}
}这使用了 G. E. P. Box、M. E. Muller 和 G. Marsaglia 的 polar method,该方法在 Donald E. Knuth 的《The Art of Computer Programming, Volume 2:Seminumerical Algorithms》的第 3.4.1 节,小节 C,算法 P 中进行了描述。注意,对于一次调用 Math.log 和一次调用 Math.sqrt 而言,它生成了两个单独的值。
返回:
下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。
这是我从API里直接拷过来的,你可以在网上下载java api,网上有很多资源,有中文版的。
用法:
1、随机生成(0,1)之间的浮点数。
random.random()。
2、随机生成100-200的整数。
random.randint(100,200)。
3、随机产生范围为10间隔为2的数。
random.randrange(0,11,2)。
注:这里输出(0,2,4,6,8,10)中一个。
4、从序列中随机抽选一个数
random.choice(list)。
5、随机排序
random.shuffle(list)。
注:list元素为数值型
从序列中获取指定长度为3的字符。
扩展资料:
Python的random方法。
random.random()用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数 n: a <= n <= b。如果 a < b, 则 b <= n <= a。
print random.uniform(10, 20) print random.uniform(20, 10)。
#18.7356606526
#12.5798298022
random.randint() 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数。
print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20。
print random.randint(20, 10) #该语句是错误的。
下限必须小于上限。
原文地址:http://www.qianchusai.com/java%E4%B8%ADrandom%E7%9A%84%E7%94%A8%E6%B3%95%E8%AF%A6%E8%A7%A3.html