20260715-数组进阶练习.md 3.4 KB

2026-07-15 数组进阶练习(课堂练习用)

说明:以下题目为数组的进阶应用,作为课堂练习或学有余力的同学额外挑战使用。


练习 1:数组元素首尾交换

难度:⭐⭐
知识点:数组索引操作、变量交换

定义一个整数数组 {10, 20, 30, 40, 50},将数组中第 1 个元素与第 5 个元素交换,第 2 个元素与第 4 个元素交换(即首尾对称交换),然后输出交换后的数组。

示例输出

交换前:10 20 30 40 50
交换后:50 40 30 20 10

提示:可以用变量交换的经典三步法 temp = a; a = b; b = temp;


练习 2:数组元素循环右移

难度:⭐⭐⭐
知识点:数组操作、循环、下标运算

定义一个整数数组 {1, 2, 3, 4, 5},将数组中的所有元素向右移动 2 个位置。超出数组范围的元素循环移到数组开头(循环右移)。

示例

移动前:1 2 3 4 5
右移2位:4 5 1 2 3

要求

  • 在原数组上操作,不创建新数组
  • 移动位数用一个变量 k = 2 控制
  • 思考:如果 k 大于数组长度怎么办?(提示:k = k % 数组长度

练习 3:数组去重

难度:⭐⭐⭐
知识点:数组遍历、嵌套循环、if 判断、新数组

定义一个整数数组 {5, 2, 8, 2, 5, 9, 1, 8, 3},去除数组中重复的元素,只保留第一次出现的元素,输出去重后的新数组。

要求

  • 不能使用 Set 等集合类
  • 只能使用数组和循环实现
  • 去重后的元素顺序保持原顺序

示例输出

原数组:   5 2 8 2 5 9 1 8 3
去重后:   5 2 8 9 1 3

提示

  • 可以先统计不重复元素的个数,再创建新数组
  • 或者创建一个足够大的新数组,遍历原数组判断是否已存在

练习 4:双色球号码生成器

难度:⭐⭐⭐⭐
知识点:数组、随机数、嵌套循环、去重

模拟双色球彩票号码生成:

规则

  1. 红球:从 1~33 中随机选出 6 个不重复 的号码
  2. 蓝球:从 1~16 中随机选出 1 个 号码

要求

  • 红球号码存入一个 int 数组
  • 蓝球号码单独用一个 int 变量存储
  • 红球号码不能重复(每次生成新号码时,需要检查是否已存在)

示例输出

红球号码:05 12 18 23 27 31
蓝球号码:09

提示

// 生成 1~33 之间的随机整数
int num = (int)(Math.random() * 33) + 1;

练习 5:基本类型 vs 引用类型(代码分析)

难度:⭐⭐
知识点:基本数据类型 vs 引用数据类型

public class ThinkDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = a;
        b = 20;
        System.out.println("a = " + a);     // ?
        System.out.println("b = " + b);     // ?

        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;
        arr2[0] = 999;
        System.out.println("arr1[0] = " + arr1[0]);   // ?
        System.out.println("arr2[0] = " + arr2[0]);   // ?
    }
}

请问以上代码的运行结果是什么?为什么 arr1[0] 的值会被改变?结合课堂笔记中"基本数据类型 vs 引用数据类型"的知识,在注释中写出你的分析。


参考笔记20260715-笔记.md 第三章「数组(Array)」