0到9生成4个8位数的字符串
分享一个面试题,哎,用自己的方法写了我好久才写出来,查了一下资料记个笔记。。。
public static void main(String[] args) { //题目:0到9这几个数字生成4个不相同的8位数的字符串,例如12345678,12345687,12345786,123456768 注意,每一个字符串中的数字也是不能重复的 //错误分析:我原来的思路是首先我们要想办法获取一个八位数的字符串,只要这个能成功弄出来,我们循环四次然后丢到HashSet中就搞定了 //所以我就想着弄一个List存放0到9,然后循环8次,每次都获取一个随机数m,然后将随机数m%list.size()得到索引下标,根据下标获取这个数之后然后 //在List中将这个数remove掉,那么下次从集合中获取一个数字的时候就不会重复了,只是这种方式贼鸡儿麻烦。。。我也是醉了 //正确分析:经过我查了一些资料,其中我们的目标是得到8个不重复的数字而已,那么直接用一个HashSet当容器,接收随机数10*Math.random(), //当set中的数量到达8个就满足条件了呀 Set<String> result = new HashSet<>(); while (result.size() < 4) { result.add(getNoRepectStr()); } System.out.println("生成的四个字符串为:" + result); } //获取一个8位不重复的字符串,注意我们获取随机数有两种方式,一种是Math.random()生成一个「0,1)之间的数,那么生成0到9,只需要乘以10就行了 // 另一种是Random random = new Random();random.nextInt(10),也是生成0到9 //我个人推荐的话直接使用第一种吧,不需要new对象,写起来比较方便 public static String getNoRepectStr() { StringBuilder sb = new StringBuilder(); Set<Integer> set = new HashSet<>(); while (set.size() < 8) { //0到9随机数 int ran = (int) (10 * Math.random()); set.add(ran); } //将set中的数字拼接成字符串然后返回 //这里有个很有意思的东西,set中的元素是从小到达排序好了的,例如往set中依次放入1,3,2,你打印的话会是1,2,3, // 不是说好的set中的元素是无序的么?有兴趣可以查查资料为啥叻? for (Integer num : set) { sb.append(num); } return sb.toString(); }
--------------以上皆原创,给未来的自己留下一点学习的痕迹!--------