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("]");
}
}
运行结果:
