java.uti.Random类nextInt方法中随机数种子为47的奇怪问题

简介:

一,问题描述

需要生成一个[0,1]的随机数。即随机生成 0 或者 1。使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个奇怪的问题:

当使用 47 作为随机数种子构造 Random对象时:

public static Random rand2 = new Random(47);
.....
System.out.println(rand2.nextInt(2));
.....

使用该对象调用 nextInt(2)方法,在Eclipse中测试,运行了20次,全部都生成 1,没有出现一次0。

 

当不提供随机数种子构造Random对象时:

public static Random rand = new Random();
.....
System.out.println(rand.nextInt(2));//0 or 1

在Eclipse中测试,运行了15次,10次出现0,5次出现1。

 

感觉,使用47做随机数种子,且只需随机 生成 0 和 1 这两个数时,并不适合。

因为,测试了多次,它总是偏向于生成其中某一个数,而另一个数没有出现。

 

复制代码
 1 public class TestRand {
 2     public static Random rand = new Random();
 3     
 4     public static Random rand2 = new Random(47);
 5     
 6     public static void main(String[] args) {
 7         
 8         //System.out.println(rand.nextInt(2));//0 or 1
 9         //System.out.println(myRand(0,1));// 0 or 1
10         
11         System.out.println(rand2.nextInt(2));//always 1 or always 0
12         //System.out.println(myRand2(0, 1));//always 1 or always 0
13         
14     }
15     
16     public static int myRand(int i, int j){
17         return rand.nextInt(j - i + 1) + i;
18     }
19     
20     public static int myRand2(int i, int j){
21         return rand2.nextInt(j - i + 1) + i;
22     }
23 }

 
相关文章
|
12天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
1天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
17 3
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
2天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
2天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
3天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
3天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
9 0
|
3天前
|
Java C语言
详解java方法与递归
详解java方法与递归
9 3
|
3天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
13 0
|
3天前
|
Java API 调度
【Java多线程】Thread类的基本用法
【Java多线程】Thread类的基本用法
6 0