- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章实例讲解Java中random.nextInt()与Math.random()的基础用法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、来源 。
random.nextint() 为 java.util.random类中的方法; 。
math.random() 为 java.lang.math 类中的静态方法.
2、用法 。
产生0-n的伪随机数(伪随机数参看最后注解):
1
2
3
|
// 两种生成对象方式:带种子和不带种子(两种方式的区别见注解)
random random =
new
random();
integer res = random.nextint(n);
|
1
|
integer res = (
int
)(math.random() * n);
|
3、jdk源码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// random.nextint(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;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// math.random()
public
static
double
random() {
random rnd = randomnumbergenerator;
// 第一次调用,生成一个随机数生成器
if
(rnd ==
null
) rnd = initrng();
return
rnd.nextdouble();
}
// 生成的方法为同步的,线程安全
private
static
synchronized
random initrng() {
random rnd = randomnumbergenerator;
return
(rnd ==
null
) ? (randomnumbergenerator =
new
random()) : rnd;
}
// 该方法为 random 类中的方法
public
double
nextdouble() {
return
(((
long
)(next(
26
)) <<
27
) + next(
27
))
/ (
double
)(1l <<
53
);
}
|
4、小结 。
5、注:何谓伪随机数 。
伪随机既有规则的随机,random类中的随机算法就是伪随机.
具体表现为:相同种子数的random对象生成的随机数序列相同:
1
2
3
4
5
6
7
8
|
@test
public
void
createprojectno() {
random r1 =
new
random(
100
);
random r2 =
new
random(
100
);
for
(
int
i =
0
; i <
100
; i ++) {
system.out.println(r1.nextint(
10
)+
", "
+r2.nextint(
10
));
}
}
|
结果为:
如不想生成相同的随机数序列,则应只使用一个random类。而math类中的随机数生成器 randomnumbergenerator 对象为静态的,可考虑使用.
6、注:random类的两种构造方法区别 。
1、源码 。
1
2
3
4
5
6
7
8
9
10
11
12
|
public
random() {
this
(seeduniquifier() ^ system.nanotime());
}
public
random(
long
seed) {
if
(getclass() == random.
class
)
this
.seed =
new
atomiclong(initialscramble(seed));
else
{
// subclass might have overriden setseed
this
.seed =
new
atomiclong();
setseed(seed);
}
}
|
2、区别 。
从源码中可以看到,未定义种子的构造方法里,使用当前系统时间相关的一个数字作为种子数,该种子数只作为随机算法的起源数字,与生成的随机数区间无关系.
这篇文章是我对java中随机数的一些简单的理解,如有不对的地方或者其他的见解欢迎指导.
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持。如果你想了解更多相关内容请查看下面相关链接 。
原文链接:https://blog.csdn.net/u012099869/article/details/50394644 。
最后此篇关于实例讲解Java中random.nextInt()与Math.random()的基础用法的文章就讲到这里了,如果你想了解更多关于实例讲解Java中random.nextInt()与Math.random()的基础用法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在编写一个 Bukkit 插件,它将雪球视为彩弹。当我不小心使用时: (byte) (random.nextInt() % 16) 而不是 (byte) (random.nextInt(16))
我是编程初学者(学习Java)。我正在尝试编写一个程序,其中列出了四个不同的选项供用户选择。 这是其中的一部分: import java.util.*; public class fight
我正在使用以下代码来学习java套接字编程。它的作用是,client.java 程序从用户那里获取一个号码并将其发送到 sever.java。然后服务器将其乘以2并发回给客户端。在我的客户端程序中,它
这个问题已经有答案了: How to use java.util.Scanner to correctly read user input from System.in and act on it?
我正在使用 random 类生成 1 到 5 之间的随机数,如 myrandom.nextInt(6),它工作正常,但我想知道是否有一种方法可以给特定数字赋予权重以增加它出现的概率,假设我希望数字“4
我正在编写一个程序,该程序使用 nextInt(); 在程序中接受两个整数,并将其包装在 try catch block 中以阻止错误输入,例如 double 或字符。 当输入多个错误输入时,循环会重
我不是 Java 专家,但我有一个问题。我使用 Scanner 从键盘获取数据,但在将数据注册到数组之前我必须进行 2 次验证。一是数据不必是字符串,我使用 !in.hastNextInt() 来验证
每当我尝试执行它时,它都会在我的应用程序上给我 FC int a, b; Random s = new Random(); if (diffi.contains("easy") && name
我正在尝试从以下格式的文本文件中解析信息: WarningGeotask: 0, 1 第一个词是某个对象的关键字,要在其后的数字中给出的坐标位置创建。这是我的循环目前的样子: // Open file
我通过输入 Scanner class 请求电话号码,我只强制输入号码,但我可能会出错。我需要的是一串整数,而不是一个整数并且比一个整数的大小容量更大的东西。最终,它的长度需要是 7 个整数或 10
这个问题在这里已经有了答案: How to use java.util.Scanner to correctly read user input from System.in and act on
我需要读入一个整数,如果它不是整数则显示一条消息,我需要循环直到只输入一个 int。我在下面的代码中遇到的问题是当它循环时它不会等待读取 nextInt,它只会继续循环 - 打印出重试消息。
我有一个使用 SecureRandom 实例并获取下一个随机数的类。 让我们说这个例子是: public class ExampleClass() { public void method()
有谁知道Java的Random.nextInt()一段时间后会重演吗? 具体有没有这样的号码n使得以下两个列表相等? List a = new LinkedList<>(); List b = new
在下面的 Java 代码中 Scanner input = new Scanner(System.in); //Cmd1 int i1,i2;
是ThreadLocalRandom's nextInt() method (即没有任何参数的 nextInt() 方法)实际上生成一个没有范围的伪随机整数(即在 Integer.MIN_VALUE
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Imp
这是我正在为类制作的一个程序。在编写了大部分程序后,我现在尝试运行它,似乎有一个逻辑错误。由于某种原因,计算机只会执行到第一个 for 循环,然后忽略 scan.nextInt 方法,在这些方法中我尝
每次我尝试执行包含 .nextInt() 的代码行时,都会收到此错误:“无法对非静态字段进行静态引用” . 以下是可能影响的代码行(我能想到的): private Scanner input = ne
我问的问题不太清楚,但基本上我的任务是: Write a program to read in 5 integer numbers from the user. Youshould store the
我是一名优秀的程序员,十分优秀!