一维数组是代表一组数组;多组数据时,就需要用到二维数组。
例如:保存一个小组的学员成绩,用一维数组;保存全班10个小组的学员成绩,而且是每个小组 分开存储,用二维数组。
声明二维数组语法格式:
元素的类型[][] 数组名; 例如:int[][] scores;
声明数组确定:(1)数据的类型(2)数组名(3)维度
初始化:
初始化的目标:(1)数组的行数(2)每一行的元素个数,也称为列数(3)元素的值
二维数组有点像表格,只是它这个表格的每一行的列数不一定一样。
二维数组的行数/长度: 二维数组名.length
二维数组的其中一个元素: 二维数组名[行下标][列下标]
二维数组某一行的长度: 二维数组名[行下标].length
二维数组下标范围:
行下标的范围: [0, 数组名.length-1]
列下标的范围: [0, 数组名[行下标].length-1]
初始化的方式:
静态初始化
语法格式:
数组名 = new 元素的数据类型[][]{{第一行的数据列表}, {第二行的数据列表}, ...};
当声明和静态初始化在一句完成的话,可以简写:
元素的类型[][] 数组名 = {{第一行的数据列表}, {第二行的数据列表}, ...};
动态初始化
(1)规则矩阵:每一行的列数是一样的
(2)不规则矩阵:每一行的列数是不一定相同
步骤:
第一步:先确定行数
二维数组名 = new 元素的数据类型[行数][];
第二步:分别确定每一行的列数及其元素
二维数组名[行下标] = new 元素的数据类型[该行的列数];
错误:NullPointerException空指针异常
public class TestArray{
public static void main(String[] args) {
//有3个小组的学员成绩,每一个小组的人数不一样的
// 第一步:先确定行数
int[][] scores = new int[3][]; //注意,第二个[]中不能填数据
System.out.println("行数:" + scores.length) ;//行数:3
// System.out.println("第一行的列数:" + scores[0].length) ; //NullPointerException空指针异常
//第二步:分别确定每一行的列数及其元素
//确定第1行的列数,
//scores[0]代表第一行, 右边的new int[4]代表第一行的长度/列数是4,它能存储4个int整数,
// 此时把scores[0]看成一个一维数组,并且scores[0]是数组名
scores[0] = new int[4]; //JVM就会给他分配4个int类型的对应空间
//确定第2行的列数,
scores[1] = new int[3];
//确定第3行的列数,
scores[2] = new int[5];
//第三步:给某个元素赋值,如果没有这一步,元素都是默认值
scores[0][0] = 89;
scores[2][2] = 100;
//显示元素的值
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
System.out.print(scores[i][j] + " ");
}
System.out.println();
}
}
}
二维数组的遍历
public class TestIterate {
public static void main(String[] args) {
int[][] scores = {
{89,75,86,45,75}, //第1行的数据
{52,75,88,96,99,100,74}, //第2行的数据
{77,88,99} //第3行的数据
};
//遍历二维数组
//用到循环嵌套,双重循环
//外循环,遍历行,内循环,遍历每一行的多个元素,即列
//scores.length这里就是3,代表3行
for(int i=0; i<scores.length; i++){
//scores[i] 代表一行
//scores[0] 代表第1行 {89,75,86,45,75} scores[0].length是5
//scores[1] 代表第2行 {52,75,88,96,99,100,74} scores[1].length是7
//scores[2] 代表第3行 {77,88,99} scores[2].length是3
for(int j=0; j<scores[i].length; j++){
System.out.print(scores[i][j]+" ");//这里没有换行,为了使得一行的数据打印在一行上面
}
//内循环是打印一行中的所有元素
System.out.println();//换行
}
}
}