数组
程序 = 逻辑 + 数据,数组是存储数据的强而有力的手段。
1. 一维数组
1.1 数组的定义
数组的定义方式和变量类似。
| public class Main {
public static void main(String[] args) {
int[] a = new int[10], b;
float[] f = new float[33];
double[] d = new double[123];
char[] c = new char[21];
}
}
|
1.2 数组的初始化
| public class Main {
public static void main(String[] args) {
int[] a = {0, 1, 2}; // 含有3个元素的数组,元素分别是0, 1, 2
int[] b = new int[3]; // 含有3个元素的数组,元素的值均为0
char[] d = {'a', 'b', 'c'}; // 字符数组的初始化
}
}
|
1.3 访问数组元素
通过下标访问数组。
| public class Main {
public static void main(String[] args) {
int[] a = {0, 1, 2}; // 数组下标从0开始
System.out.printf("%d %d %d\n", a[0], a[1], a[2]);
a[0] = 5;
System.out.println(a[0]);
}
}
|
练习题 1: 使用数组实现求斐波那契数列的第 N 项。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] f = new int[n + 1];
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= n; i ++ )
f[i] = f[i - 1] + f[i - 2];
System.out.println(f[n]);
}
}
|
练习题 2:输入一个 n,再输入 n 个整数。将这 n 个整数逆序输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i ++ )
a[i] = sc.nextInt();
for (int i = n - 1; i >= 0; i -- )
System.out.printf("%d ", a[i]);
}
}
|
练习题 3:输入 n 个数,将这 n 个数按从小到大的顺序输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i ++ )
a[i] = sc.nextInt();
for (int i = 0; i < n; i ++ )
for (int j = i + 1; j < n; j ++ )
if (a[i] > a[j]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
for (int i = 0; i < n; i ++ )
System.out.printf("%d ", a[i]);
}
}
|
2. 多维数组
多维数组就是数组的数组。
| public class Main {
public static void main(String[] args) {
int[][] a = new int[3][4]; // 大小为3的数组,每个元素是含有4个整数的数组。
int[][][] b = new int[10][20][30]; // 将所有元素的初值为0
// 大小为10的数组,它的每个元素是含有20个数组的数组
// 这些数组的元素是含有30个整数的数组
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | public class Main {
public static void main(String[] args) {
int[][] a = { // 三个元素,每个元素都是大小为4的数组
{0, 1, 2, 3}, // 第1行的初始值
{4, 5, 6, 7}, // 第2行的初始值
{8, 9, 10, 11} // 第3行的初始值
};
for (int i = 0; i < 4; i ++ ) // 将第一行全部变成0
a[0][i] = 0;
for (int i = 0; i < 3; i ++ ) { // 输出二维数组
for (int j = 0; j < 4; j ++ ) {
System.out.printf("%d ", a[i][j]);
}
System.out.println();
}
}
}
|
3. 数组的范围遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[][] a = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
};
for (int[] row: a) { // 范围遍历
for (int x: row) // 范围遍历
System.out.printf("%d ", x);
System.out.println();
}
}
}
|
4. 常用 API
- 属性
length
:返回数组长度,注意不加小括号
Arrays.sort()
:数组排序
Arrays.fill(int[] a, int val)
:填充数组
Arrays.toString()
:将数组转化为字符串
Arrays.deepToString()
:将多维数组转化为字符串
- 数组不可变长
- 使用
Arrays
需要import java.util.Arrays