在本文中,我们将详细介绍使用math.random在Java中猜测游戏的各个方面,并为您提供关于math.randomjava的相关解答,同时,我们也将为您带来关于14|JAVA常用工具类Math、R
在本文中,我们将详细介绍使用math.random在Java中猜测游戏的各个方面,并为您提供关于math.random java的相关解答,同时,我们也将为您带来关于14 | JAVA常用工具类Math、Random、SecureRandom、Java Math.random()与Random.nextInt(int)、Java Math.random()解释、Java math.random,仅生成0?的有用知识。
本文目录一览:- 使用math.random在Java中猜测游戏(math.random java)
- 14 | JAVA常用工具类Math、Random、SecureRandom
- Java Math.random()与Random.nextInt(int)
- Java Math.random()解释
- Java math.random,仅生成0?
使用math.random在Java中猜测游戏(math.random java)
嗨,我正在尝试使用Math.random生成一个介于0到100之间的随机数,然后要求用户输入一个介于0到100之间的数字或退出-1。如果该数字超出范围(而不是-1),请要求用户输入一个新数字。如果用户没有正确猜出该数字,请告诉用户该随机数是高于还是低于猜出的数字。让用户猜测,直到他们输入正确的数字或输入-1。如果他们猜到正确的数字,请告诉用户尝试了多少次,然后重新开始游戏。它将继续播放,直到用户退出为止。
我在如何只让用户输入0-100以及如何通过输入-1退出循环方面陷入困境
这是我到目前为止所拥有的,任何帮助将不胜感激!
import java.util.Scanner;
public class QuestionOne
{
public static void main(String args[])
{
Scanner keyboard = new Scanner(System.in);
int a = 1 + (int) (Math.random() * 99);
int guess;
System.out.println("Guess a number between 0-100");
while(guess != a){
guess = keyboard.nextInt();
if (guess > a)
{
System.out.println("The number is lower!");
}
else if (guess < a)
{
System.out.println("higher!");
}
else
{
System.out.println("Congratulations.You guessed the number with" + count + "tries!");
}
}
}
}
14 | JAVA常用工具类Math、Random、SecureRandom
常用的工具类
1.Math
求绝对值:
Math.abs(-100); // 100
Math.abs(-7.8); // 7.8
取最大或最小值:
Math.max(100, 99); // 100
Math.min(1.2, 2.3); // 1.2
计算xy次方:
Math.pow(2, 10); // 2的10次方=1024
计算√x:
Math.sqrt(2); // 1.414...
计算ex次方:
Math.exp(2); // 7.389...
计算以e为底的对数:
Math.log(4); // 1.386...
计算以10为底的对数:
Math.log10(100); // 2
三角函数:
Math.sin(3.14); // 0.00159...
Math.cos(3.14); // -0.9999...
Math.tan(3.14); // -0.0015...
Math.asin(1.0); // 1.57079...
Math.acos(1.0); // 0.0
Math还提供了几个数学常量:
double pi = Math.PI; // 3.14159...
double e = Math.E; // 2.7182818...
Math.sin(Math.PI / 6); // sin(π/6) = 0.5
生成一个随机数x,x的范围是0 <= x < 1
:
Math.random(); // 0.53907... 每次都不一样
如果我们要生成一个区间在[MIN, MAX)
的随机数,可以借助Math.random()
实现,计算如下:
// 区间在[MIN, MAX)的随机数
public class Main {
public static void main(String[] args) {
double x = Math.random(); // x的范围是[0,1)
double min = 10;
double max = 50;
double y = x * (max - min) + min; // y的范围是[10,50)
long n = (long) y; // n的范围是[10,50)的整数
System.out.println(y);
System.out.println(n);
}
}
2.Random
Random
用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。
要生成一个随机数,可以使用nextInt()
、nextLong()
、nextFloat()
、nextDouble()
:
Random r = new Random();
r.nextInt(); // 2071575453,每次都不一样
r.nextInt(10); // 5,生成一个[0,10)之间的int
r.nextLong(); // 8811649292570369305,每次都不一样
r.nextFloat(); // 0.54335...生成一个[0,1)之间的float
r.nextDouble(); // 0.3716...生成一个[0,1)之间的double
我们创建Random
实例时,如果不给定种子,就使用系统当前时间戳作为种子,因此每次运行时,种子不同,得到的伪随机数序列就不同。
如果我们在创建Random
实例时指定一个种子,就会得到完全确定的随机数序列:
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random r = new Random(12345);
for (int i = 0; i < 10; i++) {
System.out.println(r.nextInt(100));
}
// 51, 80, 41, 28, 55...
}
}
3.SecureRandom
有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom
就是用来创建安全的随机数的:
SecureRandom sr = new SecureRandom();
System.out.println(sr.nextInt(100));
SecureRandom
无法指定种子,它使用RNG(random number generator)算法。JDK的SecureRandom
实际上有多种不同的底层实现,有的使用安全随机种子加上伪随机数算法来产生安全的随机数,有的使用真正的随机数生成器。实际使用的时候,可以优先获取高强度的安全随机数生成器,如果没有提供,再使用普通等级的安全随机数生成器:
import java.util.Arrays;
import java.security.SecureRandom;
import java.security.NoSuchAlgorithmException;
public class Main {
public static void main(String[] args) {
SecureRandom sr = null;
try {
sr = SecureRandom.getInstanceStrong(); // 获取高强度安全随机数生成器
} catch (NoSuchAlgorithmException e) {
sr = new SecureRandom(); // 获取普通的安全随机数生成器
}
byte[] buffer = new byte[16];
sr.nextBytes(buffer); // 用安全随机数填充buffer
System.out.println(Arrays.toString(buffer));
}
}
Java Math.random()与Random.nextInt(int)
是什么区别Math.random() * n和Random.nextInt(n)在那里n是一个整数?
答案1
小编典典这是Gili链接到的Sun论坛帖子中为什么“为什么比同时具有更高的效率和更少的偏见” 的详细说明:Random.nextInt(n)Math.random() * n
Math.random()
内部使用Random.nextDouble()
。
Random.nextDouble()
两次使用Random.next()
来生成一个在其尾数中具有近似均匀分布的位的double,因此它在0到1-(2 ^ -53)
的范围内均匀分布。
Random.nextInt(n)
平均使用Random.next()
少于两次-它使用一次,并且如果获得的值大于MAX_INT以下的n的最高倍数,它将再次尝试,否则返回模n的值(这是防止高于MAX_INT的n的最高倍数的值倾斜),因此返回一个在0到n-1范围内均匀分布的值。
在按比例缩放6之前,Math.random(
)的输出是从均匀分布得出的2 ^ 53个可能值之一。
缩放为6不会更改可能值的数量,然后将其强制转换为int会强制将这些值放入六个“存储桶”(0、1、2、3、4、5)之一,每个存储桶对应于涵盖其中一个范围的范围1501199875790165
或1501199875790166
的可能值(因为6不是2 ^ 53
的视变数)。这意味着对于足够数量的骰子辊(或具有足够数量的侧面的骰子),骰子将显示自己偏向较大的铲斗。
您将要等待很长时间才能看到这种效果。
Math.random()
还需要大约两次处理,并且需要进行同步。
Java Math.random()解释
这是一个非常简单的Java(尽管可能适用于所有编程)问题:
Math.random()
返回介于零和一之间的数字。
如果我想返回零到一百之间的整数,我会这样做:
(int) Math.floor(Math.random() * 101)
在一百到一百之间,我会做:
(int) Math.ceil(Math.random() * 100)
但是,如果我想得到三到五之间的数字怎么办?它会像下面的语句:
(int) Math.random() * 5 + 3
我知道nextInt()
在java.lang.util.Random
。但是我想学习如何使用Math.random()
。
答案1
小编典典int randomWithRange(int min, int max){ int range = (max - min) + 1; return (int)(Math.random() * range) + min;}
输出randomWithRange(2, 5)
10次:
5233244454
边界是包含边界的,即[2,5]
,并且min必须小于max上面的示例。
编辑:如果有人要尝试并变得愚蠢和扭转min和max,你可以将代码更改为:
int randomWithRange(int min, int max){ int range = Math.abs(max - min) + 1; return (int)(Math.random() * range) + (min <= max ? min : max);}
EDIT2:关于doubles 的问题,只是:
double randomWithRange(double min, double max){ double range = (max - min); return (Math.random() * range) + min;}
再说一次,如果你想证明这一点,那就是:
double randomWithRange(double min, double max){ double range = Math.abs(max - min); return (Math.random() * range) + (min <= max ? min : max);}
Java math.random,仅生成0?
以下代码仅产生0;-;
我究竟做错了什么?
public class RockPaperSci { public static void main(String[] args) { //Rock 1 //Paper 2 //Scissors 3 int croll =1+(int)Math.random()*3-1; System.out.println(croll); }}
编辑,另一张海报建议修复它。int croll = 1 +(int)(Math.random()* 4-1);
感谢大家!
答案1
小编典典你正在使用Math.random()
哪个州
返回double
带有正号(大于或等于0.0并小于)的值1.0
。
你正在将结果转换为int
,返回值的整数部分,即0。
然后1 + 0 - 1 = 0。
考虑使用 java.util.Random
Random rand = new Random();System.out.println(rand.nextInt(3) + 1);
今天关于使用math.random在Java中猜测游戏和math.random java的分享就到这里,希望大家有所收获,若想了解更多关于14 | JAVA常用工具类Math、Random、SecureRandom、Java Math.random()与Random.nextInt(int)、Java Math.random()解释、Java math.random,仅生成0?等相关知识,可以在本站进行查询。
本文标签: