Java教程

如何在Java中生成随机数

Java 编程中,我们经常需要在开发过程中 生成随机数应用程序。许多应用程序具有 随机生成数字的功能,例如验证用户是否许多应用程序使用 OTP 。随机数的最好例子是骰子。因为当我们扔它时,我们得到一个1到6之间的随机数。
在本节中,我们将学习什么是 随机数Java如何生成随机数

随机数

随机数是使用大量数字并使用数学算法选择一个数字的数字。它满足以下两个条件:
生成的值在确定的时间间隔内均匀分布。 不可能根据当前和过去的值来猜测未来的价值。

在Java中生成随机数

在Java中,使用该方法和类可以通过三种方式生成随机数。
使用 random()方法 使用 Random 使用 ThreadLocalRandom 使用 ints()方法(在Java 8中)

使用Math.random()方法

Java Math 类具有许多用于不同数学运算的方法。其中之一是 random()方法。它是Math类的 static 方法。我们可以直接调用它。它仅生成 double 类型的随机数 大于或等于0.0 小于1.0 。在使用random()方法之前,我们必须导入 java.lang.Math 类。
语法:
public static double random()
它不接受任何参数。它返回一个大于或等于0.0且小于1.0的伪随机双精度数。
让我们创建一个使用random()方法生成随机数的程序。
RandomNumberExample1.java
import java.lang.Math;
public class RandomNumberExample1{
    public static void main(String args[]) {
        // Generating random numbers
System.out.println("1st Random Number: " + Math.random());
        System.out.println("2nd Random Number: " + Math.random());
        System.out.println("3rd Random Number: " + Math.random());
        System.out.println("4th Random Number: " + Math.random());
    }
}
输出:
1st Random Number: 0.17434160924512265
2nd Random Number: 0.4297410090709448
3rd Random Number: 0.4828656381344487
4th Random Number: 0.13267917059488898
记住: 每次执行程序时,我们得到不同的输出。您的输出可能与上面显示的输出不同。
如果我们想在指定范围之间生成随机数,我们也可以使用以下公式。
Math.random() * (max - min + 1) + min
在上面的公式中,最小值包含所有最大值,而最大值除外。
让我们创建一个程序,该程序生成200到400之间的随机数。
RandomNumberExample2.java
public class RandomNumberExample2{
    public static void main( String args[] ) {
        int min = 200;
        int max = 400;
        //Generate random double value from 200 to 400
System.out.println("Random value of type double between "+min+" to "+max+ ":");
        double a = Math.random()*(max-min+1)+min;
        System.out.println(a);
        //Generate random int value from 200 to 400
System.out.println("Random value of type int between "+min+" to "+max+ ":");
        int b = (int)(Math.random()*(max-min+1)+min);
        System.out.println(b);
    }
}
输出1:
Random value of type double between 200 to 400:
233.88329802655377
Random value of type int between 200 to 400:
329
输出2:
Random value of type double between 200 to 400:
254.8419979875385
Random value of type int between 200 to 400:
284

使用随机类

生成随机数的另一种方法是使用java.util包的 Random 类。它生成伪随机数流。我们可以生成任何数据类型的随机数,例如整数,浮点数,双精度型,布尔型和长型。如果要使用此类生成随机数,请按照以下步骤操作:
首先,import java.lang.Random 创建Random类的对象 调用以下任何一种方法: nextInt(int bound) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()
以上所有方法都从该随机数生成器的序列中返回下一个伪随机,均匀分布的值(对应的方法)。 nextDouble() nextFloat()方法会生成0.0到1.0之间的随机值。
nextInt(int bound)方法接受必须为正的参数绑定(上部)。它会生成一个介于0到边界1之间的随机数。
让我们创建一个使用Random类生成随机数的程序。
RandomNumberExample3.java
import java.util.Random;
public class RandomNumberExample3{
    public static void main(String args[]) {
        // creating an object of Random class
Random random = new Random();
        // Generates random integers 0 to 49
int x = random.nextInt(50);
        // Generates random integers 0 to 999
int y = random.nextInt(1000);
        // Prints random integer values
System.out.println("Randomly Generated Integers Values");
        System.out.println(x);
        System.out.println(y);
        // Generates Random doubles values
double a = random.nextDouble();
        double b = random.nextDouble();
        // Prints random double values
System.out.println("Randomly Generated double Values");
        System.out.println(a);
        System.out.println(b);
        // Generates Random float values
float f=random.nextfloat();
        float i=random.nextfloat();
        // Prints random float values
System.out.println("Randomly Generated float Values");
        System.out.println(f);
        System.out.println(i);
        // Generates Random long values
long p = random.nextLong();
        long q = random.nextLong();
        // Prints random long values
System.out.println("Randomly Generated long Values");
        System.out.println(p);
        System.out.println(q);
        // Generates Random boolean values
boolean m=random.nextBoolean();
        boolean n=random.nextBoolean();
        // Prints random boolean values
System.out.println("Randomly Generated boolean Values");
        System.out.println(m);
        System.out.println(n);
    }
}
输出:
Randomly Generated Integers Values
23
767
Randomly Generated double Values
0.37823814494212016
0.998058172671956
Randomly Generated float Values
0.87804186
0.93880254
Randomly Generated long Values
-4974823544291679198
3650240138416076693
Randomly Generated boolean Values
false
true

使用ThreadLocalRandom类

ThreadLocalRandom 类在 java.util.concurrent 包中定义。它是使用内部生成的种子初始化的,与Math类的随机生成器相同。无法修改。我们可以通过以下方式使用此类:
ThreadLocalRandom.current().nextX(...)
其中X为Int,Long等

注意: 不可能意外地与多个线程共享ThreadLocalRandom。

我们可以生成任意数据类型的随机数,例如整数,浮点数,双精度型,布尔型和长型。如果要使用此类生成随机数,请按照以下步骤操作:
首先,使用 java.util.concurrent.ThreadLocalRandom 导入类。 调用您要为其随机生成数字的相应方法。 nextInt() nextDouble() nextLong() nextFloat() nextBoolean()
以上所有方法都将覆盖Random类的相应方法并返回相应的值。
nextInt(int bound) nextDouble(int bound) nextLong(int bound)
上述方法解析参数 bound (upper),该参数必须 为正。它返回介于0(含)和指定范围(不含)之间的相应随机生成的值。如果边界为负,则抛出 IllegalArgumentExcetion
nextInt(int origin, int bound) nextDouble(int origin, int bound) nextLong(int origin, int bound)
上述方法解析两个参数 origin bound 。原点指定返回的 最低值,界限指定 上限。它返回指定的原点(包括)和边界(排除)之间的相应随机生成的值。另外,如果原点大于或等于边界,则抛出 IllegalArgumentExcetion
让我们创建一个使用 ThreadLocalRandom类生成随机数的程序。
RandomNumberExample4.java
import java.util.concurrent.ThreadLocalRandom;
public class RandomNumberExample4{
    public static void main(String args[]) {
        // Generate random integers between 0 to 999
int a = ThreadLocalRandom.current().nextInt();
        int b = ThreadLocalRandom.current().nextInt();
        // Print random integer values
System.out.println("Randomly Generated Integer Values:");
        System.out.println(a);
        System.out.println(b);
        // Generate Random double values
double c = ThreadLocalRandom.current().nextDouble();
        double d = ThreadLocalRandom.current().nextDouble();
        // Print random doubles
System.out.println("Randomly Generated double Values:");
        System.out.println(c);
        System.out.println(d);
        // Generate random boolean values
boolean e = ThreadLocalRandom.current().nextBoolean();
        boolean f = ThreadLocalRandom.current().nextBoolean();
        // Print random Booleans
System.out.println("Randomly Generated boolean Values:");
        System.out.println(e);
        System.out.println(f);
    }
}
输出1:
Randomly Generated Integer Values:
348534891
-1887936727
Randomly Generated double Values:
0.15644440033119833
0.5242730752133399
Randomly Generated boolean Values:
true
true
输出2:
Output 2:
Randomly Generated Integer Values:
402755574
295398333
Randomly Generated double Values:
0.4856461791062565
0.5148677091077654
Randomly Generated boolean Values:
false
true
类似地,我们可以使用 ThreadLocalRandomclass 的其他方法。

Java 8中的随机数生成

在Java 8中,在Random类中添加了一个新方法ints()。使用该方法之前,我们必须导入 java.util.Random
ints():
伪随机整数值生成与调用nextInt()方法相同。它返回无限个伪随机整数值流。
ints(long streamSize):
该方法解析参数 streamSize 类型长。它指定要生成的值的数量。伪随机整数值生成与调用nextInt()方法相同。它还返回随机生成的int值的流。如果流大小小于零,则会引发 IllegalArgumentException
ints(长streamSize,int randomNumberOrigin,int randomNumberBound):
参数:
streamSize: 要生成的值数。 randomNumberOrigin: 每个随机值的起源 randomNumberBound: 每个随机值的界限
它返回具有指定起点和界限的伪随机整数值流。如果出现以下情况,它将抛出 IllegalArgumentException : stramSize <0 起源> =绑定
ints(int randomNumberOrigin, int randomNumberBound):
参数:
randomNumberOrigin: 每个随机值的来源 randomNumberBound: 每个随机值的界限
它将返回具有指定起点和界限的无限个伪随机整数值流。如果原点大于或等于bound,则会抛出 IllegalArgumentException
类似地,我们还可以使用 longs()来生成long和double类型的流。 doubles()方法。
让我们创建一个程序,该程序使用 ints()方法生成整数流。
RandomNumberExample5.java
import java.util.Random;
public class RandomNumberExample5
{
    public static void main(String[] args)
{
        randomInts(5);
        randomInts(9, 50, 90);
        //getStreamOfRandomInts(30, 50);
    }
    //method that generates a stream of integers having size 5
public static void randomInts(int num)
{
        Random random = new Random();
        random.ints(num).forEach(System.out::println);
    }
    //method that generates a stream of 9 integers between 50 to 90
public static void randomInts(int num, int origin, int bound)
{
        Random random1 = new Random();
        random1.ints(num, origin, bound).forEach(System.out::println);
    }
}
输出1:
727900357
-1073118456
306279822
370327182
1366265119
65
75
75
88
76
75
56
86
85
输出2:
-1338107947
-1698771421
594232770
-1224937976
-1625069815
56
69
67
87
64
52
72
75
76

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4