不重复的随机数问题

前言

对于随机数的运用,在开发中经常会用到。有时需要生成不重复的定范围定总量的随机数,比如1~20,需要打乱的1~20中的10个数,那到底怎么做呢?

一、不重复的随机数

我们知道,直接用random会有重复的数字,想要避免重复,可以用到set集合的特性。

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class SetDemo {
       static Random  random;
    public static void main(String[] args) {
        Set<Integer> set=new HashSet<>();
           random=new Random();

          while(set.size()<10)
          {
              int a=   random.nextInt(20)+1;
              if(!set.contains(a))
              {
                  set.add(a);
              }


          }

          for(Integer integer:set)
          {
              System.out.println(integer);
          }




    }


}

这正是用到了Set集合里的元素不重复的特性。

二.不重复的字符

既然不重复的数字已经实现了,那如果需要打乱的不重复的字符或字符串怎么办呢?以下是想到的两种可行的方法。希望对大家有帮助。

方法一,通过Set集合中的元素无序的特性。

   /*
   *通过add字符串一个字符一个字符的往set集合里面添加元素
   * */
   public static Set<String> getCharaterWay2(){
        Set<String> set=new HashSet<>();

       String add=" 冂一一" ;
       for(int i=0;i<add.length();i++)
       {
           set.add(String.valueOf(add.charAt(i)));
       }


    return set;
   }

注:   字符串中少了个'一',这正是set集合不能存储重复元素造成的,而那个丢失的‘一’位置变为了“ ”。

方法二,通过Collections.shuffle()方法打乱ArranyList集合的元素

   public static ArrayList<String> getCharater(){
        ArrayList< String> arrayList=new ArrayList<String>();
        String add="冂一一sheyrteewdgfhgjhkuky";
        for(int i=0;i<add.length();i++)
        arrayList.add(String.valueOf(add.charAt(i)));
       Collections.shuffle(arrayList);

            return  arrayList;

   }

可以看到,相同的字符依然存在,没有丢失。如果想要在字符串总量一定且含有重复字符的话,可以用这种方法。

今日小结:线性代数:第二讲

              英语单词之间:23day,

             恬静语法简单句

              阅读:《内在动机》

            

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天真小巫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值