黑马程序员---排序-冒泡排序

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


package com.itheima;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test9 {
/**
*  定义一个静态方法,该方法可以接收一个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("感谢您的使用,再见!");
}

}

运行结果如下:


----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值