zoukankan      html  css  js  c++  java
  • 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();
        }
  • 相关阅读:
    让 .Net 程序 脱离 .net framework框架 运行的方法 转
    MySpaces性能提高的过程转
    AskNet 内容查询系统 筹备中
    关于自定义表单的一些想法
    Url重写
    show一下我的办公桌
    IronRuby 初览
    微软将终止对SQL2000的支持
    WCF 消息交换 转
    感受刘德华的努力
  • 原文地址:https://www.cnblogs.com/wyq1995/p/13504637.html
Copyright © 2011-2022 走看看