Java基础入门:数组与循环

64 阅读4分钟

数组是一种线性数据结构,它允许我们存储固定数量的同类型元素。这些元素可以通过索引访问,索引通常是从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提供了几种关键字来实现这一点:breakcontinue

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程序。希望这些内容对你有所帮助!如果你有任何具体的问题或需要进一步的示例,请随时告诉我。