package Day2.MethodPackage.ArrayPackage;/** * <h>IdeaNewStart</h> * * @author : AChun * @date : 2021-12-18 17:40 * @since : 1.8 **/ import sun.awt.windows.WPrinterJob; import java.util.Random; import java.util.Scanner; /** * 类成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词意外,后面的单词首字母大写 * 局部变量:首字母小写和驼峰原则 * 常量:大写字母和下划线:PI_VALUE * 类名:首字母大写和驼峰原则:Man,GoodMan * 方法名:首字母小写和驼峰原则:run(),runRun() * */ public class Bubble_pricatice { public static void main(String[] args) { //既然要做排序,那么就不能只是做固定好的数组,数组里的参数的是自己从控制台录入的信息,这样方便测试 //1.调用Scanner方法创建初始化对象scanner,记得末尾写个 (对象名).close关闭控制台录入功能 Scanner scanner=new Scanner(System.in); //2.定义一个空的数组,给它定义一个数组长度控制范围 //此时定义的数组arr1的长度为5,但是,有个注意点:[0,1,2,3,4],计算机里面把0算作第一位元素 int[] arr1=new int[5]; //3.写一个方法,将控制台录入的信息传给数组 addarr(scanner,arr1);//方法名(参数对象1,参数对象2...),你调用的方法需要什么参数,就写什么,这里我需要用到scanner对象和数组arr1,就写了两个 //我用的idea编程的,所以鼠标点击需要创建的方法任意位置上,alt加回车直接创建了私有方法 printarr(arr1);//打印出排序前的数组信息 //4.调用冒泡排序方法 bubble_Sort(arr1); //5.打印出原先数组内的信息,再打印出通过冒泡排序后的数组信息 printarr(arr1);//打印出排序后的数 } /*****冒泡排序******/ //冒泡排序方法,老样子,公共方法,也可以私有,但是私有只给特定的数组对象使用不太自私了吗? public static void bubble_Sort(int[] arr) {// //其实吧,所谓的冒泡排序,你可以理解为降序排序,将相邻的两个数据进行比较,后面的大于前面的,就互换位置 /*****换位置******/ //要会换位置,水杯换水原则,两个满杯子互换水,肯定需要第三个空杯子来互换杯子里的水嘛 //0.1 定义一个空的变量,用来换值使用 int empty=0; //0.2 外层循环,判断循环几次 /* * [1,12,3,6,15] * > * [12,1,3,6,15] * > * [12,3,1,6,15] * > * 以此类推,第一轮排序只需要遍历4次,就是 (数组对象名).length-1次 * */ for (int i = 0; i < arr.length-1; i++) { //0.3 在第一轮遍历的基础上,前面遍历好的数据在互相冒泡遍历 for (int j = 0; j < arr.length-1; j++) { //判断大小互换位置 if(arr[j]<arr[j+1]){//如果前面这个数小于后面那个数 empty=arr[j];//将前面那个小的数传值给empty变量,此时arr[i]这个变量就是空值了,因为杯子里的水倒给了empty杯子了 arr[j]=arr[j+1];//将后面这个大的数“倒”给前面那个已经成为空值的arr[i]“空杯子” arr[j+1]=empty;//最后将empty"杯子"里的小的"水"倒给后面那个"杯子" } } } System.out.println("冒泡结束啦!"); } //录入数据信息 private static void addarr(Scanner scanner, int[] arr1) { //写一个for循环,循环次数要小于数组长度: (数组名).length代表数组长度 for (int i = 0; i < arr1.length; i++) { System.out.println("请输入第"+(i+1)+"个数据:");//数组里读取元素从0索引开始算作第一位,比如说你取第五个元素,其实取得是数组里的4号索引位置的元素 arr1[i]=scanner.nextInt();//将控制台录入的信息挨个传给从arr1数组中遍历来的元素 } } //打印数组信息,此时定义一个公共方法,任何数组对象都能调用 public static void printarr(int[] arr){//此时形参代表的就是整个数组,任何数组都可以调用它打印出数组信息 System.out.print("["); for (int i = 0; i < arr.length; i++) { //简单的就这样输出 // System.out.print(arr[i]); //逼格高一点用三元运算符 /*****三元运算符******/ System.out.print(i==arr.length-1?arr[i]:arr[i]+",");//三元运算符: 例如:a>b?a:b,如果a真的大于b,那么输出a,如果a不大于b,就输出b; //三元运算符:?问号前面条件为真就输出":"前面的,条件为假就输出":"后面的 //逼格再高一点可以用forEach方法 //逼格更厉害的用集合做,集合遍历的方法中有个labda表达式,更快更强 } System.out.println("]"); } } 运行结果: