A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test9 {
        /**第九题
         * 9、 定义一个静态方法,该方法可以接收一个List<Integer>,方法内对List进行排序
         * @param args
         */
        //用于跳出循环的标志
        private static boolean isrun=true;
        //用于就收用户输入的排序规则
        private static String str;
        public static void main(String[] args) {
                //声明一个list变量并初始化
                List<Integer> list = new ArrayList<Integer>();
                System.out.println("提示:\n感谢您使用智能排序小程序!!\n在输入数据期间想要结束输入,请输入'finash'结束输入!!!");
                //循环接收并处理输入的字符
                while(isrun)
                {
                        System.out.println("请您输入要排序的数据:");
                        //初始化接收键盘输入的scanner变量
                        Scanner userInput = new Scanner(System.in);
                        //获取用户输入的字符串
                        String input = userInput.nextLine();
                        //该异常会在输入的不是数字的情况下进入catch异常处理
                        try {
                                //将字符型变量强制转换成int型,如果字符型变量不是数字则会抛出异常
                                int n = Integer.valueOf(input);
                                //向list集合中添加数据
                                list.add(n);
                        }
                        catch (Exception e) {
                                if(input.toLowerCase().equals("finash"))
                                {
                                        System.out.println("您结束了输入数据!! \n请您按照如下规则输入排序规则:");
                                        break;
                                }
                                else
                                {
                                        System.out.println("您输入的不是数值型数据,请重新输入:");
                                        continue;
                                }
                        }
                }
                System.out.println("请您输入'<'(从小到大)或'>'(从大到小)来决定您的排序规则:");
                while(true)
                {
                        //初始化接收键盘输入的scanner变量
                        Scanner userInput = new Scanner(System.in);
                        //获取用户输入的字符用于决定排序的条件
                        String input = userInput.nextLine();
                        //System.out.println(input);
                        if(input.equals("<") || input.equals(">"))
                        {
                                System.out.print("您输入的原始数据为:");
                                for(int i = 0; i < list.size(); i ++)
                                        System.out.print(list.get(i) + "  ");
                                System.out.println();
                                System.out.println("已经进入排序,请稍等...");
                                str = input;
                                //调用函数进行排序
                                formatList(list);
                                break;
                        }
                        else{
                                System.out.println("您输入的排序条件有误!!!请重新输入:");
                                continue;
                        }
                }
        }
        public static void formatList(List<Integer> list)
        {
                //声明并初始化变量n,将n作为中间界,进行数据的交换
                int n = 0;
                //判断list集合中是否有数据存在
                if(list.size() <= 0)
                        System.out.println("list集合为null,您未有数据进行处理!!");
                if(list.size() > 0)
                {
                        if(str.equals(">"))
                        {
                                System.out.print("按照从小到大的顺序排序为:");
                        }
                        else if (str.equals("<"))
                        {
                                System.out.print("按照从大到小的顺序排序为:");
                        }
                        //该循环是控制比较的次数(例如10个数据,只需要比较9次就得到结果了)
                        for(int i = 0; i < list.size()-1; i ++)
                        {
                                //这层循环是把j作为比较对象的下标,为什么j=i+1(因为每次比较的)
                                for(int j = i+1; j < list.size(); j ++)
                                {
                                        if(str.equals(">"))
                                        {
                                                //System.out.print("按照从小到大的顺序排序为:");
                                                //拿着比较的数(list.get(<i)的都已按照要求排好了)与集合中的剩余的数进行比较,如果符合条件就进行数据交换
                                                if(list.get(i) > list.get(j))
                                                {
                                                        //把List集合中i位置的数据保存到n中
                                                        n = list.get(i);
                                                        //把List集合中i位置数据删除
                                                        list.remove(i);
                                                        //添加新数据,把List集合中原j位置的数据放到List集合中i位置。因为上面移除了一个,所以下面要想获得原始的想要的位置的数据就要-1
                                                        list.add(i, list.get(j-1));
                                                        //移除List集合中j位置的数据
                                                        list.remove(j);
                                                        //把List集合中i位置的数据添加到List集合中j处
                                                        list.add(j, n);
                                                }
                                        }
                                        else
                                        {
                                                //System.out.print("按照从大到小的顺序排序为:");
                                                if(list.get(i) < list.get(j))
                                                {
                                                        //把List集合中i位置的数据保存到n中
                                                        n = list.get(i);
                                                        //把List集合中i位置数据删除
                                                        list.remove(i);
                                                        //添加新数据,把List集合中原j位置的数据放到List集合中i位置。因为上面移除了一个,所以下面要想获得原始的想要的位置的数据就要-1
                                                        list.add(i, list.get(j-1));
                                                        //移除List集合中j位置的数据
                                                        list.remove(j);
                                                        //把List集合中i位置的数据添加到List集合中j处
                                                        list.add(j, n);
                                                }       
                                        }
                                }
                                //没比较后就输出处理后的结果
                                System.out.print(list.get(i) + " < ");
                        }
                        //因为要比较的次数比总集合中的个数少1个,所以要把最后一个数据输出出来
                        System.out.print(list.get(list.size()-1));
                }
                System.out.println();
                System.out.print("感谢您的使用,再见!");
        }
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

18 个回复

倒序浏览
这个就是我想要的,东西好多啊
回复 使用道具 举报
看这么长的代码.有一种晕眩的赶脚
回复 使用道具 举报
这么长的代码啊  
回复 使用道具 举报
继续学习~
回复 使用道具 举报
貌似很屌的样子啊!
回复 使用道具 举报
是不是有点复杂化了。不过确实是好东西{:2_36:}
回复 使用道具 举报
貌似真的很复杂啊
回复 使用道具 举报
确实好复杂啊
回复 使用道具 举报
li520 来自手机 中级黑马 2015-6-2 22:06:37
10#
一点不难
回复 使用道具 举报
好厉害,写的注释也很详细
回复 使用道具 举报
需要写这么长?                     
回复 使用道具 举报
我也正在做这道题不过一点思路也没有啊.果然是大神.
回复 使用道具 举报
貌似很屌的样子
回复 使用道具 举报
buco写得很好哈
回复 使用道具 举报
....................................................................................................................
回复 使用道具 举报
感觉好长啊,写的真不错。
回复 使用道具 举报
好长啊,都看不懂了!
回复 使用道具 举报
学习了,复制一份,回去仔细看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马