tip:[start]程序 = 逻辑 + 数据,数组是存储数据的强而有力的手段。 —— 闫学灿tip:[end]
一维数组
数组的定义
- 数组的定义方式和变量类似。
- java中数组的定义[]是写在数组名前面(与c++区分),开辟长度需要new,即面向对象。
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];
}
}
(2)也可以同时定义多个数组
int[] a = new int[10], b;
(3)不一定只要基本数据类型可以定义数组,String也可以定义数组
String[] a = new String[10];//这个数组里面包含10个String类型的变量
数组的初始化
public class Main {
public static void main(String[] args) {
// 含有3个元素的数组,元素分别是0, 1, 2
int[] a = {0, 1, 2};
// 含有3个元素的数组,元素的值均为0
int[] b = new int[3];
// 字符数组的初始化
char[] d = {'a', 'b', 'c'};
// 定义一个数组a
int[] a;
// 初始化:将数组a初始化为一个长度为10的数组,表示a里面包含10个int变量
a = new int[10];
// 等价于 ⬇ 边定义边初始化
int[] a = new int[10]
}
}
访问数组元素
- 通过下标访问数组。
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 项。
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 个整数逆序输出。
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 个数按从小到大的顺序输出。
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]);
}
}
多维数组
- 多维数组就是数组的数组。
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个整数的数组
}
}
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();
}
}
}
数组的范围遍历
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();
}
}
}
常用API
- 属性
length:返回数组长度,注意不加小括号 Arrays.sort():数组排序Arrays.fill(int[] a, int val):填充数组Arrays.toString():将数组转化为字符串Arrays.deepToString():将多维数组转化为字符串- 数组不可变长,使用
Arrays需要import java.util.Arrays