Java基础-Random随机数

前言

Java Random类是Java中生成随机数的一个重要工具类,它提供了丰富的方法来生成不同类型的随机数。在本文中,我们将深入探讨Java Random类的用法,并介绍一些常见的应用场景。

1. Random类的基本用法

Random类位于java.util包中,因此在使用前需要先导入该包:

1

import java.util.Random;

Random类的实例化非常简单,只需调用其默认构造函数即可:

1

Random random = new Random();

随机数的生成可以通过Random类的不同方法来实现。下面分别介绍几种常见的用法。

1.1 生成随机整数

Random类提供了nextInt()方法来生成一个随机整数。该方法默认生成的整数范围是int类型的取值范围:

1

int randomNumber = random.nextInt();

如果需要生成指定范围内的随机整数,可以使用nextInt(int bound)方法。

该方法会生成一个从0到bound-1之间的随机整数:

1

2

3

int min = 1;

int max = 10;

int randomNumber = random.nextInt(max - min + 1) + min;

通过以上代码,我们可以生成一个1到10之间(包括1和10)的随机整数。

1.2 生成随机浮点数

Random类提供了nextDouble()方法来生成一个0.0到1.0之间的随机浮点数:

1

double randomNumber = random.nextDouble();

如果需要生成指定范围内的随机浮点数,可以使用如下公式:

1

2

3

double min = 0.0;

double max = 1.0;

double randomNumber = min + (max - min) * random.nextDouble();

通过以上代码,我们可以生成一个0.0到1.0之间的随机浮点数。

1.3 生成随机布尔值

Random类提供了nextBoolean()方法来生成一个随机布尔值:

1

boolean randomBoolean = random.nextBoolean();

nextBoolean()方法会以50%的概率生成truefalse

2. Random类的高级用法

除了基本的随机数生成,Random类还提供了一些高级的用法。接下来,我们将介绍一些常见的高级用法。

2.1 生成随机字符

如果需要生成随机字符,可以利用Random类生成一个随机整数,然后将其转换为对应的字符:

1

2

int randomNumber = random.nextInt(26); // 生成0到25之间的随机整数

char randomChar = (char) ('a' + randomNumber); // 将随机整数转换为对应的字符

通过以上代码,我们可以生成一个小写字母a到z之间的随机字符。

2.2 生成随机密码

随机密码通常需要包含字母、数字和特殊字符。我们可以结合Random类和字符串操作来生成随机密码:

1

2

3

4

5

6

7

8

String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*";

int length = 10; // 密码长度为10

StringBuilder password = new StringBuilder();

for (int i = 0; i < length; i++) {

    int index = random.nextInt(characters.length());

    password.append(characters.charAt(index));

}

通过以上代码,我们可以生成一个包含小写字母、大写字母、数字和特殊字符的随机密码,长度为10个字符。

2.3 打乱数组顺序

有时候,我们需要对一个数组的元素进行随机排序。可以利用Random类生成随机下标,然后交换数组中对应下标的元素来实现:

1

2

3

4

5

6

7

8

int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for (int i = numbers.length - 1; i > 0; i--) {

    int j = random.nextInt(i + 1);

    int temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

}

通过以上代码,我们可以随机打乱数组numbers中元素的顺序。

3. Random类的线程安全性

需要注意的是,Random类的实例方法不是线程安全的。如果在多线程环境下使用Random类生成随机数,可能会导致结果不准确。在多线程环境下,可以使用java.util.concurrent.ThreadLocalRandom类来生成线程安全的随机数。

附:对生成随机数的数量以及范围进行限定

其中可以通过随机数初始化中设定streamSize以及使用.limit()这两种方法对随机数的个数进行设定

例如:

1

2

3

4

5

6

7

//输出随机数并且排序

        random.ints().limit(10).sorted().forEach(System.out::println);

        System.out.println();

        //或者

        random.ints(10).sorted().forEach(System.out::println);

        //限制随机数的范围,生成0-100内的5个随机数

        random.ints(0,100).limit(5).sorted().forEach(System.out::println);

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值