GVKun编程网logo

使用math.random在Java中猜测游戏(math.random java)

26

在本文中,我们将详细介绍使用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)

使用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

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)

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)之一,每个存储桶对应于涵盖其中一个范围的范围15011998757901651501199875790166的可能值(因为6不是2 ^ 53的视变数)。这意味着对于足够数量的骰子辊(或具有足够数量的侧面的骰子),骰子将显示自己偏向较大的铲斗。

您将要等待很长时间才能看到这种效果。

Math.random()还需要大约两次处理,并且需要进行同步。

Java 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?

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?等相关知识,可以在本站进行查询。

本文标签: