【小测试】Random的使用问题

老紫竹 2008-09-17 02:09:41
写出如下代码的运行结果和原因
import java.util.Random;

public class T {
static void test() {
Random r = new Random(2008);
System.out.println(r.nextInt(3));
}

public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
test();
}
}
}

...全文
983 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
listmaps 2008-09-25
  • 打赏
  • 举报
回复
回个帖先,继续学习...
hai666wang 2008-09-25
  • 打赏
  • 举报
回复
学习了
yangkaixin1226 2008-09-25
  • 打赏
  • 举报
回复
种子都一样,产生随机数一样
gs840120 2008-09-24
  • 打赏
  • 举报
回复
学习了
xh_zhye386 2008-09-24
  • 打赏
  • 举报
回复
学习了
Welhum_ 2008-09-24
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 cuilupeng999 的回复:]
Random r = new Random(need);need不同产生的数不同
r.nextInt(n) n不同产生的数不同,
[/Quote]

n不同产生的数的范围不同 如果 你的n=1的话产生的数全部都为0,跟need就没有关系了
这么理解对吗?
vextj 2008-09-23
  • 打赏
  • 举报
回复
楼主已经给出答案了。java的随机数生成器生成的是伪随机数,而不是真正意义上的随机数。所谓伪随机数是一组可重复的随机数生成序列,在固定的种子,固定范围的情况下,会生成完全一样的随机数序列,如果种子是2008,

Random r = new Random(2008)
nextInt(3)
则会产生以下的随机数序列:

1
2
2
1
2
0

每次以2008为种子重新生成Random对象,第一个产生的随机数为1,无论调用多少次,产生的第一个伪随机数总是伪1. 而不设定种子的情况下,默认的构造器会以当前的系统时间为种子来构造随机数序列,所以每次生成的随机数序列也都是不同的。
helei123a 2008-09-23
  • 打赏
  • 举报
回复
学习
no9988 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 bobor_2008 的回复:]
为什么十个的都是相同的数字,那是因为它们使用了相同的种子.

Random r = new Random(2008);

为什么会产生相同的数.
上面的朋友不是解释的很清楚.
所以我们在产生产随机数时就
Random r = new Random(System.currentTimeMillis());

这样写了.

===========================================
不知道说的对不对.还请朋友们给予纠正.
[/Quote]

你说的时候应该测试下
这样对你自己也有好处
` 你那样写产生出来的也是一样的`
System.currentTimeMillis() 这个你把他打印出来就会发现得到的也是一个固定的值`
应该是 不写 才对``
fhvsbgmy 2008-09-22
  • 打赏
  • 举报
回复
import java.util.Random;

public class T {
static void test() {
Random r = new Random(2008);
System.out.println(r.nextInt(3));
System.out.println(r.nextInt(3));
System.out.println(r.nextInt(3));
}

public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
test();
}
}
}

-------------------------------------------------------------
import java.util.Random;

public class T {
static void test() {
Random r = new Random(2008);
System.out.println(r.nextInt(2008));
System.out.println(r.nextInt(2008));
System.out.println(r.nextInt(2008));
}

public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
test();
}
}
}
老紫竹 2008-09-19
  • 打赏
  • 举报
回复
达到目的了。结论是
相同的种子,相同的范围,会得到相同顺序的随机数据。
wolfpkfox 2008-09-19
  • 打赏
  • 举报
回复
正解
[Quote=引用 25 楼 KAKUKYOWU 的回复:]
上面说的是有种子情况下的结果;
如果没有种子:
----------------------------------------------------
public class Test {

static void test() {

Random r = new Random();
System.out.println(r.nextInt(3));
}

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {
test();
}
}
}
---------------…
[/Quote]
junjun1984 2008-09-19
  • 打赏
  • 举报
回复
如果是:
Random r = new Random(1);
System.out.println(r.nextInt(3));

那出的是:0
如果是:
Random r = new Random(2);
System.out.println(r.nextInt(3));

那出的是:1
如果是:
Random r = new Random(3);
System.out.println(r.nextInt(3));

那出的是:2
wolfpkfox 2008-09-19
  • 打赏
  • 举报
回复
顶顶更健康
name99_6 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 KAKUKYOWU 的回复:]
首先要搞明白种子的概念:
想要获取一个范围内的随机数(例如3,随机数可能是0或1或2),首先需要一个种子(其实就是一个数值)。
每个种子会对应这个范围内(0或1或2)的唯一的一个随机数。
2008这个种子在3这个范围内,所对应的随机数为1,所以结果都为1.
(注意:2008在3这个范围内对应的是1,这个是死的,固定的,无论你执行多少次,它还是1)
[/Quote]
对头,但为什么是1可能就是算法的问题了/
lgtwboy 2008-09-19
  • 打赏
  • 举报
回复
手头有活 没时间看 凑凑热闹
zou_wei_forever 2008-09-19
  • 打赏
  • 举报
回复
mark了!
cuilupeng999 2008-09-19
  • 打赏
  • 举报
回复
Random r = new Random(need);need不同产生的数不同
r.nextInt(n) n不同产生的数不同,
dashi99 2008-09-19
  • 打赏
  • 举报
回复
r.nextInt(3);把3换成别的数试一下,它就会改变了,但总是一个数
yurui05 2008-09-19
  • 打赏
  • 举报
回复
学习了
加载更多回复(37)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧