黑马程序员技术交流社区

标题: 【黑马程序员济南】JavaEE基础阶段必会案例NO.11 [打印本页]

作者: 小鲁哥哥    时间: 2017-10-19 18:36
标题: 【黑马程序员济南】JavaEE基础阶段必会案例NO.11
本帖最后由 小鲁哥哥 于 2017-10-19 20:15 编辑

【黑马程序员济南】JavaEE基础阶段必会案例NO.11

黑马程序员课程内容丰富多样,每个知识点我们都设计有新奇的案例让大家练习。黑马程序员训练营的课程也是案例驱动教学,每天都会进行大量的代码练习。今天我们就来一起做一个基础阶段第8天的一个小案例。

         案例要求:随机生成5个整数存入集合中,要求不能有重复数字,将这5个数字写入arr.txt中
                        

         案例分析:我们要用到的知识点:遍历集合,IO流,随机数

         分析完一个大概以后我们先思考一个问题:如何保证集合中没有重复的数字?
         用我们今天学习的知识来做就不能使用set集合了,不然的话就很简单了。因为set集合有自动去重的功能,保证元素的唯一性。
         但是我们不用set集合也是可以保证没有重复数字的。每次添加之前先遍历集合看有没有这个数。
         
[Java] 纯文本查看 复制代码
ArrayList<Integer> list = new ArrayList<>();

                Random r = new Random();
                for (int i = 0; i < 5; i++) {
                        int n = r.nextInt(10);//不断的产生随机数
                        list.add(n);
                        System.out.println(n);
                }


        第一步我们先生成了5个随机数添加到集合里。[attach]191334[/attach]
但是我们运行看结果发现,有重复的数字添加进去了,接下来我们就要去重了,如果发现重复就再产生一个随机数,但是我们不知道会有几次这样的情况所以我们只能不断的产生随机数,进行判断。也就是要有个死循环。
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
                ArrayList<Integer> list = new ArrayList<>();
                Random r = new Random();
                while (true) {
                        int i = r.nextInt(10);// 不断的产生随机数
                        boolean b = true;
                        System.out.println(i);
                        for (int j = 0; j < list.size(); j++) {// 遍历集合中已经有的整数,判断新的数是否已经存在
                                if (list.get(j) == i) {
                                        System.out.print(i + "已经存在" + "\r\n");
                                        b = false;
                                }
                        }
                        if (b) {
                                list.add(i);
                        }
                        if (list.size() == 5) {
                                break;
                        }
                }
        }

好的,现在我们已经能保证里面没有重复的了,接下来就是把数据写入文件就ok啦!
[Java] 纯文本查看 复制代码
public static void main(String[] args) throws IOException {
                ArrayList<Integer> list = new ArrayList<>();
                Random r = new Random();
                while(true){
                        int i = r.nextInt(10);//不断的产生随机数
                        boolean b = true;
                        System.out.println(i);
                        for (int j = 0; j < list.size(); j++) {//遍历集合中已经有的整数,判断新的数是否已经存在
                                if(list.get(j)==i){
                                        System.out.print(i + "已经存在"+"\r\n");
                                    b = false;
                                }
                        }
                        if(b){
                                list.add(i);
                        }
                        if(list.size()==5){
                                break;
                        }
                }
                FileWriter fw = new FileWriter("arr.txt");
                for (int i = 0; i < list.size(); i++) {
                        fw.write(list.get(i)+" ");
                }
                fw.close();
                System.out.println("end");
        }

ok,大功告成!!
[attach]191341[/attach]

     这个案例作为一个经典案例用来复习IO流集合的相关知识非常不错,很新颖。其实,每个案例都有很多种写法,不同的人可能有不同的思路。黑马程序员训练营也是非常鼓励大家开动脑筋积极思考的。
      
      点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈
     【黑马程序员济南】小鲁哥哥全学科技术整合帖(一贴在手!天下我有!)

黑马!加油!







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2