内容正文:
数组、字符串、包(一)
计算机程序设计
专题复习讲练测
电工版第二版
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
考试内容:
一维数组、二维数组。
知识点要求:
1.掌握一维数组、二维数组的声明、创建和初始化。
2.理解数组的大小和元素默认值。
3.掌握数组元素的使用。
₀
知识点梳理
二
数组
把具有相同类型的若干变量按有序的形式组织起来,用统一的名字来表示,这些按序排列的相同类型的数据元素的集合被称为数组。
简言之,数组是相同类型的数据按顺序组成的一种复合数据类型。
1 2 0 20 0 0 1 3
数组
数组索引
0
1
2
3
4
5
6
7
知识点梳理
二
一维数组的声明及创建
(1)声明一维数组
声明一维数组包括数组的名字、数组中包含的元素的数据类型。
声明一维数组有以下两种格式:
格式1:数组元素类型数组名[];
格式2:数组元素类型[]数组名;
在实际编程中,第二种格式(int[] numbers;)更为常见,将数组类型(由元素类型和方括号表示)视为一个整体,这有助于提高代码的可读性。数组的声明仅确定了内存中有一个特定类型的数组名,但未实际创建数组,还需为其分配元素空间并指明元素个数。
知识点梳理
二
一维数组的声明及创建
(2)创建数组
创建数组则是为数组元素分配内存单元,形成一个数组对象,可通过new 关键字创建。
步骤:
① 数组元素类型 数组名字[];
② 数组名字 = new 数组元素类型[数组元素的个数];
将声明与创建两步合并为一步来完成数组创建:
数组元素类型 数组名字[] = new 数组元素的类型[数组元素的个数];
知识点梳理
二
一维数组的使用及初始化
静态初始化
在声明数组的同时,直接给出数组元素的值。
动态初始化
在声明数组后,使用 new 关键字分配内存空间。
知识点梳理
二
一维数组的遍历
(1)使用传统的for循环:这是最常见的方法,通过索引来遍历数组。
知识点梳理
二
一维数组的遍历
(2)使用增强型for循环(for-each循环)
Java 5及以上版本提供了增强型for循环,这使得遍历数组更加简洁。
知识点梳理
二
一维数组的遍历
(3)使用Iterator(通过将数组转换为List)
虽然不是直接遍历数组,但可以将数组转换为List,然后使用Iterator来遍历。
知识点梳理
二
一维数组的最值
思路:
(1)初始化数组:首先,你需要有一个已经填充了数据的一维数组。
(2)设置初始最大值和最小值:通常,我们将数组的第一个元素设置为初始的最大值和最小值。
(3)遍历数组:通过循环遍历数组中的每个元素,并与当前的最大值和最小值进行比较。
(4)更新最大值和最小值:如果在遍历过程中发现更大的值,则更新最大值;如果发现更小的值,则更新最小值。
(5)输出结果:在遍历完成后,输出最大值和最小值。
知识点梳理
二
一维数组的最值
示例代码
注意事项:
确保数组不为空,否则在尝试访问array[0]时会抛出ArrayIndexOutOfBoundsException。
如果数组可能包含null值(对于对象数组),则需要在代码中添加适当的检查。
如果数组非常大,考虑使用并行流(Java 8及以上版本)来提高查找效率。
知识点梳理
二
一维数组的排序
(1)使用Java内置的排序方法
Java提供了Arrays.sort()方法,可以很容易地对数组进行排序。这个方法使用了快速排序算法,对于原始数据类型(如int、float等)的数组,非常高效。
知识点梳理
二
一维数组的排序
(2)使用冒泡排序算法(Bubble Sort)
基本原理:
1) 比较相邻的元素:首先,比较数组中的相邻元素。如果第一个比第二个大(或者第一个比第二个小,取决于排序的顺序),则交换它们的位置。
2) 遍历数列:对数列进行遍历,重复步骤1,直到没有再需要交换的元素为止。这意味着该数列已经排序完成。
3) 重复上述步骤:对数列进行多轮遍历,每次遍历都会将一个元素放到它应该在的位置上。在第一轮遍历后,数列中最大的元素会被放在最后一个位置上;在第二轮遍历后,数列中第二大的元素会被放在倒数第二个位置上,依此类推。
4) 结束条件:当数列中的元素已经全部排好序时,排序过程结束
知识点梳理
二
一维数组的排序
示例代码
冒泡排序算法的实现相对简单,但效率相对较低。对于一个有n个元素的数组,冒泡排序的时间复杂度为O(n^2)(平均时间),空间复杂度为O(1)。这意味着当数组元素较多时,冒泡排序可能不是最优的选择。
知识点梳理
二
一维数组的排序
(3)选择排序(Selection Sort)
工作原理是:首先在未排序的数组中找到最小(或最大)的元素,然后将其与数组的第一个元素交换位置。接着在剩下的未排序元素中找到最小(或最大)的元素,并将其与数组的第二个元素交换位置。这个过程一直重复,直到整个数组都被排序。
操作步骤:
1) 初始化:设置一个变量min来跟踪最小元素的位置。
2) 遍历数组:从数组的第二个元素开始,遍历数组,找到最小(或最大)元素。
3) 交换位置:将找到的最小(或最大)元素与当前最小元素的位置交换。
4) 重复步骤2和3:重复步骤2和3,每次都减少比较的范围,直到整个数组都被排序。
知识点梳理
二
一维数组的排序
示例代码
选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。这意味着选择排序在处理大型数组时效率较低.
知识点梳理
二
二维数组的声明及使用
在Java中,二维数组(有时也称为矩阵)是一个数组的数组,即一个数组中的每个元素都是一个数组。二维数组的声明和初始化与一维数组类似,但是需要指定行数和列数。
声明二维数组
二维数组的声明格式为:
dataType[][] arrayName;
其中,dataType 是数组中元素的数据类型,arrayName 是数组的名称。
知识点梳理
二
二维数组的声明及使用
初始化二维数组方式
(1)静态初始化
在声明数组的同时,直接给出数组元素的值。
动态初始化
在声明数组后,使用 new 关键字分配内存空间。
知识点梳理
二
二维数组元素
(1)访问二维数组元素
二维数组元素可以通过索引来访问,索引从0开始。行索引在前,列索引在后。
int element = matrix[1][2]; // 获取第2行第3列的元素
(2)修改二维数组元素
可以直接通过索引修改二维数组元素的值。
matrix[1][2] = 10; // 修改第2行第3列的元素为10
知识点梳理
二
遍历二维数组
可以使用嵌套的for循环来遍历二维数组。
知识点梳理
二
遍历二维数组
示例代码
限时练习
三
1. 以下可以声明并初始化一个包含5个元素的int数组,元素值分别为1, 2, 3, 4, 5的是( )
A. int[] numbers = {1, 2, 3, 4, 5};
B. int numbers[5] = {1, 2, 3, 4, 5};
C. int numbers = new int[5]{1, 2, 3, 4, 5};
D. int numbers = new int[]{1, 2, 3, 4, 5};
【答案】A
限时练习
三
2. 以下方式可以访问二维数组matrix中第2行第3列的元素的是( )
A. matrix[2, 3];
B. matrix[1][2];
C. matrix[3][2];
D. matrix[2][3];
【答案】B
【解析】二维数组元素的访问方式是matrix[行索引][列索引],索引从0开始。因此,选项B正确。
限时练习
三
3. 以下方式可以创建一个名为matrix的二维数组,并指定数组有3行2列的是( )
A. int matrix[][] = new int[3][2];
B. int[][] matrix = new int[2][3];
C. int matrix[3][2] = new int[][];
D. int[][] matrix = new int[][2];
【答案】A
【解析】 创建二维数组的格式是“数据类型[][] 数组名 = new 数据类型[行数][列数]”。因此,选项A正确。
限时练习
三
4以下可以访问一维数组numbers中的第3个元素的是( )
A. numbers[2]
B. numbers[3]
C. numbers[1]
D. numbers[0]
【答案】A
【解析】 一维数组的索引从0开始,因此第3个元素的索引是2。因此,选项A正确
限时练习
三
5. 以下可以创建一个名为matrix的二维数组,并初始化其所有元素为0的是( )
A. int[][] matrix = new int[3][2];
B. int[][] matrix = new int[3][2]{};
C. int[][] matrix = new int[][]{{0, 0}, {0, 0}, {0, 0}};
D. int[][] matrix = new int[3][2]{0};
【答案】C
【解析】选项A:创建了一个3行2列的二维数组,但没有初始化元素,元素值默认为0。
选项B:与选项A相同,创建了一个3行2列的二维数组,但没有初始化元素。
选项D:语法错误,无法创建一个二维数组,只包含一个元素为0的数组。
限时练习
三
6.数组必须先声明后创建才能使用。( )
【答案】正确
【解析】 数组声明只是告诉编译器要创建一个数组变量,但并未分配内存。只有通过创建(使用new关键字)才能为数组分配内存并使其可用。
限时练习
三
7. Java中的数组类型可以包含不同类型的数据元素。( )
【答案】错误
【解析】 Java中的数组类型必须是统一的,即数组中所有元素的数据类型必须相同。
限时练习
三
8.冒泡排序算法的时间复杂度为O(n log n)。( )
【答案】错误
【解析】冒泡排序算法的时间复杂度为O(n^2),即其效率较低,不适合用于大型数组。
限时练习
三
9.二维数组元素可以通过索引访问和修改。( )
【答案】正确
【解析】二维数组元素可以通过行索引和列索引访问和修改,例如:matrix[1][2] 表示访问第2行第3列的元素。
限时练习
三
10. 创建一个一维数组,包含10个随机整数(1-100),计算并输出数组元素的总和。
【答案】
限时练习
三
11. 创建一个一维数组,包含10个随机整数(1-100),找出并输出数组中的最大值和最小值。
【答案】
限时练习
三
12. 创建一个一维数组,包含10个随机整数(1-100),使用冒泡排序算法对数组进行升序排序,并输出排序后的数组。
【答案】
限时练习
三
13.创建一个一维数组,包含10个随机整数(1-100),找出并输出数组中的所有素数。
【答案】
内容小结
五
谢谢
$$