一、数组
基本介绍
初始化数组
- 动态初始化 1
- 数组的定义
数组类型 数组名[] = new 数据类型[大小]- 如:
int a[] = new int[5]// 创建一个数组,名字a,存放5个int
- 数组的引用(使用/访问/获取)
数组名[下标/索引/index]// 下标从0开始
- 案例演示 ```java // 循环输入5个成绩,保存到double数组,并输出
- 数组的定义
- 动态初始化 1
// 第一种动态分配方式 double scores[] = new double[5]; // 初始化数组
Scanner scanner = new Scanner(System.in); for (int i = 0; i < scores.length; i++) { // .length表示数组的长度 System.out.print(“请输入第” + (i + 1) + “个元素的值:”); scores[i] = scanner.nextDouble(); // scores[i] 用来接收输入 } // 输出,遍历数组 for (int i = 0; i < scores.length; i++) { System.out.println(“第” + (i + 1) + “个元素为:” + scores[i]); }
2. 动态初始化 2- 声明数组- `数据类型 数组名[];` 或者 `数据类型[] 数组名;`- `int a[];` 或者 `int[] a;`- 创建数组- `数组名 = new 数据类型[大小];`- `a = new int[10];`- 案例演示```java// 循环输入5个成绩,保存到double数组,并输出// 第二种动态分配方式,先声明数组,再new分配空间double scores[]; // 声明数组,这时scores为nullscores = new double[5]; // 分配内存空间,可以存放数据Scanner scanner = new Scanner(System.in);for (int i = 0; i < scores.length; i++) { // .length表示数组的长度System.out.print("请输入第" + (i + 1) + "个元素的值:");scores[i] = scanner.nextDouble(); // scores[i] 用来接收输入}// 输出,遍历数组for (int i = 0; i < scores.length; i++) {System.out.println("第" + (i + 1) + "个元素为:" + scores[i]);}
- 静态初始化
- 初始化数组
数据类型 数组名[] = { 元素值, 元素值, ... }int a[] = { 2, 5, 6, 7, 8, 89, 90}
- 案例演示 ```java // 定义一个数组 // 1. double[] 表示是double类型的数组,数组名 hens // 2. {3, 5, 1, 3.4, 2, 50} 表示数组的值/元素 double[] hens = { 3, 5, 1, 3.4, 2, 50 };
- 初始化数组
// 遍历数组得到数组的所有元素的和 // 1. 我们可以通过 hens[下标] 来访问数组的元素,下标是从0开始编号的 // 2. 通过for就可以循环的访问数组的元素/值 // 3. 使用一个变量将各个元素累计 // 4. 数组名.length 返回数组的长度 double total = 0; for (int i = 0; i < hens.length; i++) { // System.out.println(“第” + (i + 1) + “个元素的值 = “ + hens[i]); total += hens[i]; } System.out.println(“总数 = “ + total + “ 平均数 = “ + total / 6);
- 注意事项1. 数组是多个**想同类型**数据的组合,实现对这些数据的统一管理1. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用1. 数组创建后,如果没有赋值,有默认值- `int 0, short 0, byte 0, long 0, float 0.0, double 0.0, char \u0000, boolean false, String null`4. 使用数组的步骤1. 声明数组并开辟空间1. 给数组各个元素赋值1. 使用数组5. 数组的下标是从0开始的5. 数组下标必须在指定范围内使用,否则报:下标越界异常5. 数组属于引用类型,数组型数据是对象(object)- 案例演示```javapublic static void main(String[] args) {/** 创建一个char类型的26个元素的数组,分别放置'A'-'Z'* 使用for循环访问所有元素并打印出来* 提示:char类型数据运算 'A' + 1 = 'B'** 思路分析:* 1. 创建数组,遍历字母写入数组* 2. for循环打印数组*/char letter[] = new char[26];// 第一种写法// for (char c = 'A', i = 0; c <= 'Z'; c++, i++) {// letter[i] = c;// }// 第二种写法for (int i = 0; i < letter.length; i++) { // 循环letter[i] = (char) ('A' + i); // 'A' + i 是int,需要强制转换}for (int i = 0; i < letter.length; i++) {System.out.print(letter[i] + " ");}}
2. 数组的赋值机制
- 基本数据类型赋值,这个值就是具体的数据,而且互相不影响 ```java // 基本数据类型赋值 // n2的变化不会影响到n1的值 int n1 = 2; int n2 = n1;
n2 = 80; // n2的变化不会影响到n1的值 System.out.println(“n1 = “ + n1 + “, n2 = “ + n2); // n1 = 10, n2 = 80
2. 数组在默认情况下是引用传递,赋的是**地址值**```java// 数组在默认情况下是引用传递,赋的是地址值,赋值方式为引用赋值// arr2的变化会影响到arr1的值int[] arr1 = { 1, 2, 3 };int[] arr2 = arr1;arr2[0] = 10; // 更改arr2的元素// arr1 的元素for (int i = 0; i < arr1.length; i++) {System.out.print(arr1[i] + " ");// { 10, 2, 3 }}System.out.println();// arr2 的元素for (int i = 0; i < arr2.length; i++) {System.out.print(arr2[i] + " "); // { 10, 2, 3 }}
- 将
int[] arr1 = {10, 20, 30}拷贝到arr2数组 - 要求数据空间独立 ```java // 将int[] arr1 = {10, 20, 30} 拷贝到arr2数组 // 要求数据空间独立
int[] arr1 = { 10, 20, 30 };
// 创建arr2数组,开辟新的数据空间,大小为arr1.length int[] arr2 = new int[arr1.length];
// 遍历把arr1的元素依次拷贝到arr2 for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; }
// 改变arr2的元素,不会改变arr1的元素 arr2[0] = 80;
// 遍历arr1 for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + “ “);// { 10, 20, 30 } } System.out.println();
// 遍历arr2 for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + “ “); // { 80, 20, 30 } }
<a name="c74d5ebf"></a>#### 4. 数组反转- 要求把数组的元素内容反转```java// 把数组的元素内容反转// { 11, 22, 33, 44, 55, 66 } >> {66, 55, 44, 33, 22, 11 }/** 方法1:通过找规律反转* 思路分析:* 1. 把 arr[0] 和 arr[5] 进行交换 { 66, 22, 33, 44, 55, 11 }* 2. 把 arr[1] 和 arr[4] 进行交换 { 66, 55, 33, 44, 22, 11 }* 3. 把 arr[2] 和 arr[3] 进行交换 { 66, 55, 44, 33, 22, 11 }* 4. 一共要交换 3 次 = arr.length / 2* 5. 每次交换时,对应的下标是 arr[i] 和 arr[arr.length - 1 - i]*/int[] arr = { 11, 22, 33, 44, 55, 66 };int len = arr.length; // 定义变量len等于数组的的长度for (int i = 0, temp; i < len / 2; i++) {temp = arr[i];arr[i] = arr[len - 1 - i];arr[len - 1 - i] = temp;}// 遍历arrSystem.out.println("====== arr ======");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " "); // {66, 55, 44, 33, 22, 11 }}System.out.println();/** 方法2:使用逆序赋值方式* 思路分析:* 1. 创建一个新数组* 2. for循环依次遍历* 3. 倒序将每个元素拷贝到第二个数组*/int[] arr1 = { 11, 22, 33, 44, 55, 66 };int[] arr2 = new int[arr1.length];int len1 = arr1.length; // 定义变量len1等于数组的的长度for (int i = 0; i < len1; i++) {arr2[i] = arr1[len1 - 1 - i];}// 让arr1指向arr2的数据空间// 此时arr1原来的数据空间没有变量引用,会被当做垃圾销毁arr1 = arr2;// 遍历arr1System.out.println("====== arr1 ======");for (int i = 0; i < arr1.length; i++) {System.out.print(arr1[i] + " ");}
5. 数组添加
实现动态给数组添加元素效果,实现对数组扩容
- 原始数组使用静态分配
int[] arr = { 1, 2, 3 } - 增加的元素,直接放在数组的最后
arr = { 1, 2, 3 , 4} 用户可以通过如下方法来决定是否继续添加
添加成功,是否继续?y/npublic static void main(String[] args) {/** 要求:实现动态给数组添加元素效果,实现对数组扩容* 1. 原始数组使用静态分配 int[] arr = { 1, 2, 3 }* 2. 增加的元素,直接放在数组的最后 arr = { 1, 2, 3, 4 }* 3. 用户可以通过如下方法来决定是否继续添加 添加成功,是否继续?y/n** 思路分析:* 1. 定义初始数组 int[] arr = { 1, 2, 3 }* 2. 定义一个新数组 int[] arrNew = new int[arr.length + 1]* 3. 遍历 arr 数组,一次将arr的元素拷贝到 arrNew 数组* 4. 将需要添加的元素赋给arrNew最后一个元素* 5. 让arr指向arrNew,那么原来的arr数组就会被销毁* 6. 创建Scanner对象接收用户输入* 7. 创建变量holdOn判断是否继续,默认为y* 8. while循环接收判断用户是否继续*/Scanner scanner = new Scanner(System.in);int addNum;char holdOn = 0;int[] arr = { 1, 2, 3 };int[] arrNew;do {// 定义一个新数组arrNew = new int[arr.length + 1];// 将arr的元素拷贝到 arrNew 数组for (int i = 0; i < arr.length; i++) {arrNew[i] = arr[i];}System.out.print("请输入要添加的元素:");addNum = scanner.nextInt();// 把addNum赋给arrNew最后一个元素arrNew[arrNew.length - 1] = addNum;arr = arrNew; // 让arr指向arrNewSystem.out.println("添加后的数组为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();// 接收用户输入是否继续添加System.out.print("添加成功,是否继续?y/n:");holdOn = scanner.next().charAt(0);// if (holdOn == 'n') {// break;// }} while (holdOn != 'n');// 打印扩容后的数组System.out.println("程序退出,扩容后的数组为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
- 原始数组使用静态分配
实现数组缩减
- 有一个数组
{ 1, 2, 3, 4, 5 },将该数组进行缩减 - 提示用户是否继续缩减,每次缩减最后那个元素。
当只剩下最后一个元素时,
提示:不能再缩减public static void main(String[] args) {/** 实现数组的缩减* 1. 有一个数组{ 1, 2, 3, 4, 5 }* 2. 可以将该数组进行缩减* 3. 提示用户是否继续缩减,每次缩减最后那个元素。* 4. 当只剩下最后一个元素时,提示:不能再缩减** 思路分析:* 1. 创建数组 int[] arr = { 1, 2, 3, 4, 5 };* 2. 创建新数组 int[] arrNew = new int[arr.length - 1];* 3. 将arr从第0个到倒数第二个遍历赋给arrNew* 4. arr = arrNew* 5. 创建Scanner对象,接收用户输入* 6. do-while 判断用户是否继续* 7. 判断 arr.length 是否等于1*/Scanner scanner = new Scanner(System.in);char holdOn = '0';int[] arr = { 1, 2, 3, 4, 5 };int[] arrNew;do {arrNew = new int[arr.length - 1]; // 初始化arrNew// 将arr从第0个到倒数第二个遍历赋给arrNewfor (int i = 0; i < arr.length - 1; i++) {arrNew[i] = arr[i];}arr = arrNew; // 让arr指向arrNewSystem.out.println("缩减后的数组为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}if (arr.length == 1) {System.out.println("提示:不能再缩减");break;}// 判断用户输入System.out.print("是否继续缩减?y/n:");holdOn = scanner.next().charAt(0);} while (holdOn != 'n');System.out.println("程序退出...");}
- 有一个数组
二、排序
- 排序的介绍
- 排序是将一群数据,以指定的顺序进行排列的过程
排序的分类
冒泡排序 (Bubble Sorting) 的基本思想是:通过对待排序序列从后向前 (从下表较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,时值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒
- 冒泡排序动图演示
冒泡排序法案例
- 五个无序数字:24, 69, 80, 57, 13
- 使用冒泡排序法将其排成一个从小到大的有序数列
- 冒泡排序分析
- 总结特点
- 一共有5个元素
- 一共进行4轮排序,可以看成外层循环
- 每1轮排序可以确定一个数的位置,比如第1轮排序确定最大数,第2轮排序,确定第2大的数位置
- 当进行比较时,如果前面的数大于后面的数,就交换
- 每轮比较在减少 4->3->2->1 ```java /*
- 五个无序数字:24, 69, 80, 57, 13
- 使用冒泡排序法将其排成一个从小到大的有序数列
- 思路分析:
- 先完成第一轮排序
- 将多轮排序使用外层循环包括起来即可
- 优化:设置一个boolean swap,如果发生交换就true,没发生就为false */ public static void main(String[] args) { int[] arr = { 10, 13, 24, 80, 57, 23 }; int temp = 0; // 用于交换的临时变量 boolean swap = false;
// 一共进行 arr.length-1 轮排序 for (int i = 0; i < arr.length - 1; i++) { // 每1轮排序可以确定一个数的位置 for (int j = 0; j < arr.length - 1 - i; j++) {
// 进行比较,如果前面的数大于后面的数,就交换// 如果没有发生交换,说明默认从小到大排序,程序退出if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;swap = true; // 成功交换} else {swap = false; // 没有发生交换}
} // 如果没有发生交换,退出程序 if (swap == false) {
break;
} System.out.println(“第” + (i + 1) + “轮排序:”); for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k] + " ");
} System.out.println(); } }
```javapublic class BubbleSort {public static void main(String[] args) {BubbleSort bubble = new BubbleSort();int[] arr = bubble.randomArr();// 排序前for (int i : arr) {System.out.print(i + " ");}System.out.println("\n============");bubble.sort(arr);// 排序后for (int i : arr) {System.out.print(i + " ");}}// 随机生成数组,内容为10个100以下的整数public int[] randomArr() {Random random = new Random();int[] arr = new int[10];for (int i = 0; i < arr.length; i++) {arr[i] = random.nextInt(100);}return arr;}// 冒泡排序方法public int[] sort(int[] arr) {int temp = 0;for (int i = 1; i < arr.length; i++) {for (int j = 0; j < arr.length - i; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}return arr;}}
三、查找
介绍
案例演示
- 有一个数列,白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王
- 从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】
如果找到了,就提示找到,并给出下标值,没有找到则提示没有找到
public static void main(String[] args) {/** 思路分析:* 1. 创建数列* 2. 创建Scanner* 4. for循环遍历,if判断是否相同* 5. 字符串比较用 .equals() 方法* 6. 判断成功,打印下标值,退出*/String[] strs = { "白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王" };Scanner scanner = new Scanner(System.in);System.out.print("请输入要查找的名字:");String findName = scanner.next(); // 接收用户输入System.out.println("正在查找...");// for循环遍历,if判断是否相同// 字符串比较用 .equals() 方法int index = -1; // 定义一个index,判断有没有找到for (int i = 0; i < strs.length; i++) {if (findName.equals(strs[i])) {System.out.println("找到了,下标值为:" + i);index = i;break;}}if (index == -1) {System.out.println("没有找到!");}}
2. 二分查找
- 二分查找法是一种在有序数组中查找某一特定元素的搜索算法。
- 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束。
- 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
- 如果在某一步骤数组为空,则代表找不到。
- 这种搜索算法每一次比较都使搜索范围缩小一半。
四、二维数组
1. 二维数组入门
- 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”
- 基本语法
int[][] a = { { 0, 0, 0 }, { 1, 2, 3 } };
- 案例演示
```java
/*
- 请用二维数组输出如下图形
- 000000
- 001000
- 020300
- 000000
*/
int[][] arr = { { 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 0 },{ 0, 2, 0, 3, 0, 0 },{ 0, 0, 0, 0, 0, 0 } };
// 输出二维数组 for (int i = 0; i < arr.length; i++) { // 遍历二维数组的每个数组元素 // 遍历二维数组的每个元素(数组) // arr[i].length 得到对应的每个一维数组的长度 for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]); // 输出一个一维数组 } System.out.println(); // 换行 }
- 二维数组内存布局<br /><a name="0935424e"></a>#### 2. 二维数组的使用1. 动态初始化 11. 语法:`类型[][] 数组名 = new 类型[大小][大小]`1. 比如:`int arr[][] = new int[2][3]`1. 使用演示```javaint arr[][] = new int[2][3];arr[1][1] = 8;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");} // 000 080System.out.println();}
- 动态初始化 2
- 先声明:
类型 数组名[][] - 再定义(开辟空间):
数组名 = new 类型[大小][大小] - 赋值(有默认值,比如
int类型默认值0) - 使用演示
int arr[][];arr = new int[2][3];arr[1][1] = 8;此时arr为:{ { 0, 0, 0 }, { 0, 8, 0 } }
- 先声明:
动态初始化 3:列数不确定
- 需求:动态创建下面二维数组,并输出
- { { 1 }, { 2, 2 }, { 3, 3, 3 } }
- 完成案例 ```java /*
- { { 1 }, { 2, 2 }, { 3, 3, 3 } }
一共有三个一维数组,每个一维数组的元素是不一样的 */ public static void main(String[] args) { // 创建二维数组,一共有3个一维数组, // 但是每个一维数组还没有开辟空间 int[][] arr = new int[3][]; // 遍历arr每个一维数组 for (int i = 0; i < arr.length; i++) { // 给每个一维数组开辟空间 new // 如果没有给一维数组new,那么arr[i]就是null空值 arr[i] = new int[i + 1];
// 遍历一维数组,并给一维数组的每个元素赋值 for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = i + 1;
} } // 遍历arr数组 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
} System.out.println(); } } ```
- 需求:动态创建下面二维数组,并输出
- 静态初始化
- 定义:
类型 数组名[][] = { { 值1, 值2.. }, { 值1, 值2.. }.. } - 比如:
int[][] arr = { { 1, 2, 3 }, { 4 } }; - 这样也是正确的:
String[] strs = new String[] { "a", "b", "c" }; - 定义了一个二维数组arr
- arr有2个元素(每个元素都是一维数组)
- 第一个一维数组有3个元素,第二个一维数组有1个元素
- 定义:
5. 二维数组的遍历
- 遍历下面的二维数组,并得到和
int arr[][] = { {4, 6}, {1, 4, 5, 7}, {-2} };/** 遍历下面的二维数组,并得到和* int arr[][] = { {4, 6}, {1, 4, 5, 7}, {-2} }*/int arr[][] = { { 4, 6 }, { 1, 4, 5, 7 }, { -2 } };int sum = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");sum += arr[i][j];}System.out.println();}System.out.println("sum = " + sum);
6. 应用案例
使用二维数组打印一个10行的杨辉三角
public static void main(String[] args) {/** 使用二维数组打印一个10行的杨辉三角* 1* 1 1* 1 2 1* 1 3 3 1* 1 4 6 4 1* 1 5 10 10 5 1* ......* 提示:* 1. 第一行有1个元素,第n行有n个元素* 2. 每一行的第一个元素和最后一个元素都是1* 3. 从但三行开始,对于非第一个元素和最后一个元素的元素的值。* 4. arr[i][j] 规律:* arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];**/int[][] arr = new int[10][];for (int i = 0; i < arr.length; i++) {// 给每个一维数组开辟空间arr[i] = new int[i + 1];for (int j = 0; j < arr[i].length; j++) {// 如果是第一个元素或最后一个元素,就是1if (j == 0 || j == arr[i].length - 1) {arr[i][j] = 1;} else {// 杨辉三角规律arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];}}}// 输出杨辉三角for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();}}
7. 注意事项
- 一维数组的声明方式有:
int[] x或int x[] - 二维数组的声明方式有:
int[][] y或int[] y[]或int y[][] - 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同
比如int map [][] = { { 1, 2 }, { 3, 4, 5 } };map[0]是一个含有两个元素的一位数组,map[1]是一个含有三个元素的一维数组构成,也称为列数不等的二维数组 -
五、二维数组课后练习
已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
比如:[10, 12, 45, 90],添加23后,数组为:[10, 12, 23, 45, 90]public static void main(String[] args) {/** 已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序* 比如:[10, 12, 45, 90]* 添加23后数组为:[10, 12, 23, 45, 90]** 思路分析:(扩容 + 定位)* 1. 先确定添加数应该插入到哪个索引* 2. 然后扩容* 3. 遍历arr数组,如果发现 addNum <= arr[i],说明i就是要插入的位置* 4. 使用index保留 index = i;* 5. 如果遍历完后,没有发现 addNum <= arr[i],说明index = arr.length*/// 定义原数组int[] arr = { 10, 12, 45, 90 };int index = -1;int[] arrNew = new int[arr.length + 1]; // 定义一个临时数组Scanner scanner = new Scanner(System.in);System.out.println("请输入要添加的数组:");int addNum = scanner.nextInt();// 遍历arr数组,如果发现 addNum <= arr[i],说明i就是要插入的位置// 如果没有发现,则添加到arr的最后for (int i = 0; i < arr.length; i++) {if (addNum <= arr[i]) {index = i; // 找到位置后,就退出break;}}// 判断index的值if (index == -1) { // 说明没找到位置index = arr.length;}// 添加arr的元素到arrNew并跳过index// i 用来控制arrNew的下标,j 用来控制arr数组的下标for (int i = 0, j = 0; i < arrNew.length; i++) {if (i != index) { // 说明可以把arr的元素拷贝到arrNewarrNew[i] = arr[j];j++;} else {arrNew[i] = addNum;}}arr = arrNew; // 让arr指向arrNewfor (int i = 0; i < arrNew.length; i++) {System.out.print(arrNew[i] + " ");}}
随机生成10个整数(1-100)保存到数组,并倒序打印以及求平均值、最大值和最大值的下标,并查找里面是否有8
public static void main(String[] args) {/** 随机生成10个整数(1-100)保存到数组,* 并倒序打印以及求平均值、最大值和最大值的下标* 并查找里面是否有8*/int[] arr = new int[10];double sum = 0; // 定义变量sum存储数组的和int findNum = 8; // 要查找的数字为 8int index = -1; // 如果找到,就把下标记录到indexfor (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 100) + 1;sum += arr[i]; // 叠加if (arr[i] == findNum) { // 查找是否有8index = i;}}System.out.println("=====arr的元素情况=====");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println("\n=====arr的元素情况(倒序)=====");for (int i = arr.length - 1; i >= 0; i--) {System.out.print(arr[i] + " ");}// 分别比较计算出最大值int maxIndex = 0;for (int i = 1; i < arr.length; i++) {if (arr[maxIndex] < arr[i]) {maxIndex = i;}}System.out.printf("\n平均值:%.1f\n最大值:%d\n最大值下标:%d\n",(sum / arr.length), arr[maxIndex], maxIndex);if (index == -1) {System.out.println("数组内没有 " + findNum);} else {System.out.println("数组内有 " + findNum + "下标为:" + index);}}
冒泡排序
public static void main(String[] args) {/** 冒泡排序* 要求从小到大排序*/int[] arr = { 20, -1, 89, 2, 890, 7 };int temp = 0;for (int i = 0; i < arr.length - 1; i++) { // 外层循环(轮)for (int j = 0; j < arr.length - 1 - i; j++) { // 每轮的比较次数if (arr[j] > arr[j + 1]) { // 如果前面的数大,就交换temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
