数组是一种线性数据结构,它允许我们存储固定数量的同类型元素。这些元素可以通过索引访问,索引通常是从0开始的整数。数组非常适合需要快速查找特定位置的数据场景。
1.1 声明与初始化
-
声明:定义数组时需要指定其类型及名称。
1int[] numbers; // 定义一个int型数组
-
初始化:
-
直接赋值方式
1int[] scores = {95, 75, 85, 90};
-
使用new关键字
1int[] ages = new int[5]; // 创建一个长度为5的数组
-
2. 循环概述
循环是重复执行一段代码直到满足某个条件为止的过程。Java支持几种主要的循环语句,包括for
循环、while
循环和do-while
循环。
2.1 for循环
for
循环非常适合已知迭代次数的情况。
1// 打印数组的所有元素
2for (int i = 0; i < numbers.length; i++) {
3 System.out.println(numbers[i]);
4}
2.2 while循环
当不知道具体循环次数但知道何时停止时,可以使用while
循环。
1int index = 0;
2while (index < numbers.length) {
3 System.out.println(numbers[index]);
4 index++;
5}
2.3 do-while循环
至少执行一次循环体,然后检查条件是否继续。
1int counter = 0;
2do {
3 System.out.println(numbers[counter]);
4 counter++;
5} while (counter < numbers.length);
3. 综合示例
假设我们需要创建一个程序来计算一组学生分数的平均值,并打印出每个学生的成绩及其对应的等级(A, B, C等)。
1public class StudentGrades {
2 public static void main(String[] args) {
3 int[] grades = {95, 75, 85, 90, 100};
4 double sum = 0;
5
6 for (int grade : grades) { // 使用增强for循环遍历数组
7 sum += grade;
8 char letterGrade = getLetterGrade(grade);
9 System.out.printf("Score: %d, Grade: %c\n", grade, letterGrade);
10 }
11
12 double average = sum / grades.length;
13 System.out.printf("Average score: %.2f\n", average);
14 }
15
16 private static char getLetterGrade(int score) {
17 if (score >= 90) return 'A';
18 else if (score >= 80) return 'B';
19 else if (score >= 70) return 'C';
20 else if (score >= 60) return 'D';
21 else return 'F';
22 }
23}
这段代码展示了如何利用数组存储信息,并通过循环对数组进行处理,最后输出结果
4. 跳出循环
在某些情况下,你可能需要提前终止循环或跳过某些迭代。Java提供了几种关键字来实现这一点:break
和 continue
。
4.1 使用 break
退出循环
break
关键字用于立即退出当前循环。这在满足某个条件时非常有用。
1for (int i = 0; i < 10; i++) {
2 if (i == 5) {
3 break; // 当 i 等于 5 时退出循环
4 }
5 System.out.println(i);
6}
4.2 使用 continue
跳过当前迭代
continue
关键字用于跳过当前迭代并继续下一次迭代。
1for (int i = 0; i < 10; i++) {
2 if (i % 2 == 0) {
3 continue; // 跳过偶数
4 }
5 System.out.println(i); // 只打印奇数
6}
4.3 使用标签控制多重循环
在嵌套循环中,你可以使用标签来指定要跳出的特定循环。
1outer: for (int i = 0; i < 3; i++) {
2 for (int j = 0; j < 3; j++) {
3 if (i == 1 && j == 1) {
4 break outer; // 跳出外层循环
5 }
6 System.out.println("i = " + i + ", j = " + j);
7 }
8}
5. 多维数组
多维数组是数组的数组,通常用于表示表格数据或其他多维结构。
5.1 声明与初始化
-
二维数组:
1int[][] matrix = new int[3][3]; // 创建一个3x3的二维数组 2int[][] matrix2 = { 3 {1, 2, 3}, 4 {4, 5, 6}, 5 {7, 8, 9} 6};
-
三维数组:
1int[][][] cube = new int[2][2][2]; // 创建一个2x2x2的三维数组 2int[][][] cube2 = { 3 {{1, 2}, {3, 4}}, 4 {{5, 6}, {7, 8}} 5};
5.2 遍历多维数组
-
遍历二维数组:
1for (int i = 0; i < matrix.length; i++) { 2 for (int j = 0; j < matrix[i].length; j++) { 3 System.out.print(matrix[i][j] + " "); 4 } 5 System.out.println(); 6}
-
遍历三维数组:
1for (int i = 0; i < cube.length; i++) { 2 for (int j = 0; j < cube[i].length; j++) { 3 for (int k = 0; k < cube[i][j].length; k++) { 4 System.out.print(cube[i][j][k] + " "); 5 } 6 System.out.println(); 7 } 8 System.out.println(); 9}
5.3 增强for循环
增强for循环也可以用于遍历多维数组,但需要嵌套使用。
1// 遍历二维数组
2for (int[] row : matrix2) {
3 for (int value : row) {
4 System.out.print(value + " ");
5 }
6 System.out.println();
7}
8
9// 遍历三维数组
10for (int[][] layer : cube2) {
11 for (int[] row : layer) {
12 for (int value : row) {
13 System.out.print(value + " ");
14 }
15 System.out.println();
16 }
17 System.out.println();
18}
6. 其他情况下的数组
除了基本的数组操作外,还有一些其他常见的场景和技巧:
6.1 数组排序
Java提供了内置的排序方法Arrays.sort()
来对数组进行排序。
1import java.util.Arrays;
2
3public class ArraySorting {
4 public static void main(String[] args) {
5 int[] numbers = {5, 2, 9, 1, 5, 6};
6 Arrays.sort(numbers);
7 System.out.println(Arrays.toString(numbers)); // 输出 [1, 2, 5, 5, 6, 9]
8 }
9}
6.2 数组复制
使用System.arraycopy()
可以高效地复制数组。
1int[] source = {1, 2, 3, 4, 5};
2int[] destination = new int[5];
3System.arraycopy(source, 0, destination, 0, source.length);
4System.out.println(Arrays.toString(destination)); // 输出 [1, 2, 3, 4, 5]
6.3 数组填充
使用Arrays.fill()
可以将数组中的所有元素设置为指定值。
1int[] array = new int[5];
2Arrays.fill(array, 7);
3System.out.println(Arrays.toString(array)); // 输出 [7, 7, 7, 7, 7]
通过这些高级用法,你可以更灵活地处理数组和循环,从而编写出更加高效和功能丰富的Java程序。希望这些内容对你有所帮助!如果你有任何具体的问题或需要进一步的示例,请随时告诉我。