黑马程序员技术交流社区

标题: 这道题该怎么做 [打印本页]

作者: hmcxypzq    时间: 2016-4-30 14:25
标题: 这道题该怎么做
1.分析以下需求,并用代码实现:
        (1)生成10个1至100之间的随机整数(不能重复),存入一个List集合(可以先不适用泛型,泛型明天讲)
        (2)编写方法使用冒泡或选择排序对List集合进行排序,(禁用Collections.sort方法和TreeSet)
        (2)然后利用迭代器遍历集合元素并输出
        (3)如:15 18 20 40 46 60 65 70 75 91
       


作者: 张狮子    时间: 2016-4-30 15:01
抱歉我集合还没学,你可以按for循环生成十个数,用数组接受再排序打印这样的思路想想
作者: cc19930915    时间: 2016-4-30 15:03
好简单。。。
作者: 18814148171    时间: 2016-4-30 15:13
。。。。。。。。。。。不会
作者: cc19930915    时间: 2016-4-30 15:43
public static void main(String[] args) {
                //创建随机对象
                Random r = new Random();
                //创建list集合
                List list = new ArrayList<>();
                //循环判断
                while(list.size() != 10){
                        //创建随机数
                        int num = r.nextInt(101);
                        //如果列表中不包含这个随机数
                        if(!list.contains(num)){
                                //那么就添加这个随机数
                                list.add(num);
                        }
                }
                //排序
                selectSort(list);
                //遍历
                printList(list);
        }
        /*
         * 冒泡排序
         */
        public static void bubbleSort(List list){
                for(int x = 0;x < list.size() - 1;x++){
                        for(int y = 0; y < list.size() - x - 1;y++){
                                if((Integer)list.get(y) > (Integer)list.get(y + 1)){
                                        swap(list, y, y + 1);
                                }
                        }
                }
        }
        /*
         * 选择排序
         */
        public static void selectSort(List list){
                for(int x = 0;x < list.size() - 1;x ++){
                        for(int y = x + 1;y <list.size();y++){
                                if((Integer)list.get(x) > (Integer)list.get(y)){
                                        swap(list, x, y);
                                }
                        }
                }
        }
        /*
         * 替换元素
         */
        public static void swap(List list,int s1,int s2){
                int temp = (Integer)list.get(s1);
                list.set(s1, list.get(s2));
                list.set(s2,temp);
        }
        /*
         * 遍历集合
         */
        public static void printList(List list){
                for (Object object : list) {
                        System.out.print(object + " ");
                }
        }

作者: New灬狼    时间: 2016-4-30 19:08
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

/*
*1.分析以下需求,并用代码实现:
        * (1)生成10个1至100之间的随机整数(不能重复),存入一个List集合(可以先不适用泛型,泛型明天讲)
        *(2)编写方法使用冒泡或选择排序对List集合进行排序,(禁用Collections.sort方法和TreeSet)
        *(2)然后利用迭代器遍历集合元素并输出
        *(3)如:15 18 20 40 46 60 65 70 75 91
*
*/
public class Test3 {
        public static void main(String[] args) {
                // 1,创建集合和生成随机数的对象
                List list = new ArrayList();
                Random r = new Random();
               
                // 2,生成10个随机数,添加到list
                while (list.size() < 10) {
                        int i = r.nextInt(100) + 1;        //生成1-100的随机数
                        if (!list.contains(i)) {        //如果集合中没有就添加
                                list.add(i);
                        }
                }
               
                //排序前
                System.out.println(list);
               
                //3,遍历
//                selectSort(list);                //方法1
                bubbleSort(list);                //方法2
               
                //4,迭代
                Iterator it = list.iterator();                //获取迭代器
               
                while (it.hasNext()) {                        //如果还有元素
                        System.out.print(it.next() +" ");         //下一个元素加空字符串
                }
               
        }
        /*
         * 由于要求自己使用方法进行排序
         *
         * 返回值:void
         * 参数列表:List
         *
         * 思路1:
         * 1,将集合转换为数组;
         * 2,对数组进行排序;
         * 3,清空数组;
         * 4,将数组元素添加到集合中
         */
        public static void selectSort(List list) {
                //1,将集合转换为数组
                Object [] obj = list.toArray();
                //2,类型转换
                int [] arr = new int[obj.length];
                for (int i = 0;i<arr.length;i++ ) {
                        arr[i] = (int) obj[i];
                        //System.out.println(arr[i]);
                }
               
                //3,对int数组进行排序select
                int temp;
                for (int i = 0; i < arr.length; i++) {                                //控制循环次数
                        for (int j = i+1; j < arr.length-1; j++) {        //控制比较次数
                                if(arr[i] > arr[j]) {        //如果前边大于后边
                                        temp = arr [i];       
                                        arr[i] = arr[j];
                                        arr[j] = temp;
                                }
                        }
                }
                //4,清空原集合
                list.clear();
                //5,将全部元素添加到集合
                for (int i : arr) {
                        list.add(i);
                }
        }
        /*
         * 思路2:直接在集合中进行排序(bubbleSort)
         * 1,使用两个变量分别记录相邻的元素;
         * 2,对两个元素进行比较
                         *如果x > y, 将x添加到y角标后, 将原来的y删除
                         *如果x < y,继续比较               
         */
        public static void bubbleSort(List list) {
                for (int i = 0; i < list.size()-1; i++) {                        //控制循环次数
                        for (int j = 0; j < list.size()-1-i; j++) {        //控制比较次数
                                int x = (int) list.get(j);                                                //通过角标获取元素后类型转换并记录
                                int y = (int) list.get(j+1);
                                if (x > y) {
                                        list.add(j+2, x);                //将大元素添加到小元素之后
                                        list.remove(j);                //将原来的删除
                                }
                        }
                }
        }
}

作者: New灬狼    时间: 2016-4-30 19:13
我竟然把 E set(int index, E element)
          用指定的元素替代此列表中指定位置上的元素。
这个给忘了,汗.....
作者: 饭要大口吃    时间: 2016-10-7 22:42
{:2_38:}  好难.......................
作者: f418032960    时间: 2016-10-7 23:00
好难啊 ,布置的作业完全不会=.=
作者: zhangchangzhi    时间: 2016-10-9 09:47
还没学到。。。。。。。。。。。。。。。。。。。。




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