前言
对于随机数的运用,在开发中经常会用到。有时需要生成不重复的定范围定总量的随机数,比如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,
恬静语法简单句
阅读:《内在动机》