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("感谢您的使用,再见!");
}
} |