java-随机数去重(简单的方法)

java-随机数去重

随机函数是在java的入门学习中会经常使用得一种函数,在随机生成的应用场景中,比如:随机生成密码、随机生成验证码、随机生成一个数字等等。

随机函数的介绍

随机函数有两种方式:

  • Random

    Random是一个类,使用该随机函数要先声明一个Random对象,在声明Random对象后,在Random中封装了很多的方法,调用Random方法生成相应基本数据类型的的随机数据方法是:nextXxx()方法来生成指定数据类型的范围的数据。例如

    class RandomTest{
        public static void main(String[] args){
            //声明对象
            Random rd=new Random();
            //随机生成0-6以内的数据
            int t=rd.nextInt(6);
             //随机生成1-6以内的数据
             int x=rd.nextInt(6)+1;
        }
    }
    
  • Math.random:默认范围为[0.0,1.0)

    random的源代码

在Math工具类中的随机函数返回值类型是double,如果要返回int或者是其他数据类型,则需要进行类型的强制转换

class RandomTest{
    public static void main(String[] args){
        //随机生成0-6以内的数据
        int t=(int)((Math.random()*6);
        //随机生成1-6以内的数据
         int t=(int)((Math.random()*6+1);
    }
}

计算随机数的公式两者通用以Math.random为例:

  • 生成[0, Num)
    Math.random() * Num

  • 生成[Min, Max)
    Min + (Math.random() * (Max - Min))

  • 生成[Min, Max]
    Min + (int)(Math.random() * ((Max - Min) + 1))

随机数去重的方法

在生成随机数的过程中我们会发现在生成多个数据时会出现相同的数据,如果有一个需求是要在一个数组中生成不重复随机的数据。这就是随机数的去重问题。

如果在有以下需求,在一个长度为10的int数组中,要求在[1,20]范围内在数组中生成不重复的值。实现代码如下所示

import java.util.Arrays;
import java.util.Random;

public class RandomDemo {
	public static void main(String[] args) {
        //声明Random类的对象
		Random random=new Random();
		int[] arr=new int[10];
		for(int i=0;i<arr.length;i++){
            // 调用Random对象的nextInt()方法,生成范围在[1,20]的数据
			arr[i]=random.nextInt(20)+1;
			for(int j=0;j<i;j++){
           // 通过比较数组存在中的数据,如果数据中有相同的数据,退出内层循环并且i--,就再重新生成一个随机数据,直到在数组中没有相同数据
				if(arr[i]==arr[j]){
					i--;
					break;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

利用Set集合实现随机数去重的方法

学习过集合的小伙伴都知道Set接口的特性:set集合是无序的不可重复的

此方法只是简单的使用了双层for循环,也只是随机函数去重的一种基础的方法,还有其他的方法,此方法更适用于初学者。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr丶李先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值