4.数组的基本操作
数组的基本操作包括遍历数组、填充替换数组元素、对数组进行排序、复制数组以及查询数组中的元素。
• 4.1 遍历数组
遍历数组是访问数组中所有元素的过程,通常使用循环完成。
使用 for 循环遍历数组:
int[] numbers = {1, 2, 3, 4, 5}; for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); }
使用增强型 for-each 循环遍历数组:
int[] numbers = {1, 2, 3, 4, 5}; for (int num : numbers) { System.out.println(num); }
• 4.2 填充替换数组元素
可以通过循环来填充和替换数组中的元素。
int[] numbers = new int[5]; for (int i = 0; i < numbers.length; i++) { numbers[i] = i + 1; // 填充数组元素 }
• 4.3 对数组进行排序
Java提供了多种排序算法来对数组进行排序,例如冒泡排序、选择排序和快速排序。以下是一个使用Arrays类的示例来对数组进行排序:
int[] numbers = {5, 2, 9, 1, 5}; Arrays.sort(numbers); // 对数组进行升序排序
• 4.4 复制数组
可以使用不同的方法来复制一个数组到另一个数组。以下是使用System.arraycopy的示例:
int[] sourceArray = {1, 2, 3}; int[] targetArray = new int[sourceArray.length]; System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);
• 4.5查询数组
可以使用循环遍历数组来查找特定元素,或者使用搜索算法来查找元素的位置。以下是一个线性搜索的示例:
int[] numbers = {10, 20, 30, 40, 50}; int target = 30; int index = -1; for (int i = 0; i < numbers.length; i++) { if (numbers[i] == target) { index = i; // 找到目标元素的索引 break; } } if (index != -1) { System.out.println("目标元素 " + target + " 在索引 " + index + " 处找到。"); } else { System.out.println("目标元素 " + target + " 未找到。"); }
5.数组排列算法
数组排列算法是一种用于按照特定顺序重新排列数组元素的算法。在Java中,有多种排序算法可供选择,每种算法都有其优点和适用场景。
• 5.1 冒泡排序
冒泡排序是一种基本的排序算法,它重复地遍历数组,比较相邻的两个元素,并根据需要交换它们,直到整个数组有序。冒泡排序适用于小型数据集。
public static void bubbleSort(int[] arr) { int n = arr.length; boolean swapped; do { swapped = false; for (int i = 0; i < n - 1; i++) { if (arr[i] > arr[i + 1]) { // 交换 arr[i] 和 arr[i+1] 的位置 int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; swapped = true; } } } while (swapped); }
• 5.2 直接选择排序
直接选择排序是一种简单的排序算法,它在未排序的部分中选择最小(或最大)的元素,并将其放在已排序部分的末尾。直接选择排序适用于小型数据集。
public static void selectionSort(int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // 交换 arr[i] 和 arr[minIndex] 的位置 int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } }
• 5.3 反转排序
反转排序是一种简单的排序算法,它将数组元素的顺序反转,即将第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,以此类推。
public static void reverseSort(int[] arr) { int n = arr.length; for (int i = 0; i < n / 2; i++) { // 交换 arr[i] 和 arr[n-i-1] 的位置 int temp = arr[i]; arr[i] = arr[n - i - 1]; arr[n - i - 1] = temp; } }
6.实践与练习
• 6.1. 数组概述
- 练习1: 创建一个整数数组,存储您喜欢的5个数字,并编写代码打印出这些数字。
• 2. 一维数组
- 练习2: 创建一个字符串数组,包含一些水果的名称,然后使用循环遍历并打印数组中的水果名称。
- 练习3: 编写一个程序,接受用户输入的一组数字,然后计算它们的平均值。
• 3. 二维数组
- 练习4: 创建一个二维整数数组来表示一个九宫格数独游戏的初始状态,并编写代码打印出数独的初始状态。
- 练习5: 编写一个程序,生成一个3x3的随机迷宫地图,其中包括起点、终点和墙壁。
• 4. 数组的基本操作
- 练习6: 编写一个程序,接受用户输入的一组数字,并查找其中的最大值和最小值。
- 练习7: 创建两个整数数组,分别表示两个向量的坐标,然后编写代码计算这两个向量的点积(内积)。
• 5. 数组排列算法
- 练习8: 使用冒泡排序或选择排序对一个整数数组进行升序排列,并打印排序后的数组。
- 练习9: 编写一个程序,生成一个包含10个随机整数的数组,并使用快速排序算法对其进行排序。
• 6. 综合实践
- 练习10: 创建一个简单的任务管理程序,使用数组来存储任务的描述和状态(未完成/已完成),并提供选项来添加、查看和标记任务的状态。
(以上是十个小问题,下次文章回答)