目录
二维数组的使用
1.理解
2.二维数组的使用
1)二维数组的声明和初始化
2)如何调用数组的指定位置的元素
3)如何获取数组的长度
4)如何遍历数组
5)数组元素的默认初始化值
6)数组的内存解析[根据图片分析]
相关练习
练习一
练习二
练习三
二维数组的使用
1.理解
对于二维数组的理解,可以看成一维数组array1又作为另一个一维数组的array2的元素而存在。 其实,从数组底层的运行机制来看,其实没有多维数组。
2.二维数组的使用
1)二维数组的声明和初始化
//1)二维数组的声明和初始化
int[] arr = new int[]{1, 2, 3};//一维数组做对比
//静态初始化
int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
//动态初始化
String[][] arr2 = new String[3][2];//外层有3个,3个里面每个里面又有两个【后面可以不写】
String[][] arr3 = new String[3][];//只指定了行,后面的没有指明。需要赋值之后才能调用
//也是正确的:放在变量名后或类型后都可以。【注意是二维的】
int arr4[][] = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8, 9}};
int[] arr5[] = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
int[][] arr6 = {{1, 2, 3}, {4, 5}, {6, 7, 8}};//这样也是可以的[类型推断]
2)如何调用数组的指定位置的元素
//2)如何调用数组的指定位置的元素
System.out.println(arr1[0][1]);//arr1中的第0项的第1个(注意是从0开始的哦)-->2
System.out.println(arr2[1][1]);//arr1中的第1项的第1个(注意是从0开始的哦)-->由于类型位String,所以输出位null.
//System.out.println(arr3[1][0]);//运行会报错。【错误类型为空指针(NullPointerException)】
arr3[1] = new String[4];//先进行赋值
System.out.println(arr3[1][0]);
3)如何获取数组的长度
//3)如何获取数组的长度
System.out.println(arr4.length);//-->3[最外层的]
System.out.println(arr4[0].length);//-->3[arr4中的第0个]
System.out.println(arr4[1].length);//-->2[arr4中的第1个]
System.out.println(arr4[2].length);//-->4[arr4中的第2个]
4)如何遍历数组
//4)如何遍历数组
for (int i = 0; i < arr4.length; i++) {
for (int j = 0; j < arr4[i].length; j++) {
System.out.print(arr4[i][j]+" ");
}
System.out.println();//换行
}
5)数组元素的默认初始化值
规定:二维数组分为外层数组元素、内层数组元素
例: int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]...
内层元素:arr[0][0]、arr[0][1]、arr[1][0]...
针对初始化方式一:例如:int[][] arr7 = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对初始化方式二:例如:int[][] arr10 = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,会报错。
int[][] arr7 = new int[4][3];
//外层:一个[表示一维,[[表示二维,后面是类型,再后面是@加地址 内层:一维是什么就是什么
System.out.println("arr7的外层:"+arr7[0]);//是一个地址值[I@1b6d3586;
System.out.println(arr7[0][0]);//为整型-->0
System.out.println(arr7);//-->[[I@4554617c
System.out.println("************");
float[][] arr8 = new float[4][3];
System.out.println("arr8的外层:"+arr8[0]);//是一个地址值[F@74a14482;
System.out.println(arr8[0][0]);//为整型-->0.0
System.out.println(arr8);//-->[[F@1540e19d
System.out.println("************");
String[][] arr9 = new String[4][3];
System.out.println("arr9的外层:"+arr9[0]);//是一个地址值[Ljava.lang.String;@677327b6;
System.out.println(arr9[0][0]);//为整型-->null
System.out.println(arr9);//-->[[Ljava.lang.String;@14ae5a5
System.out.println("************");
int[][] arr10 = new int[4][];
System.out.println(arr10[1]);//-->null(因为后面没有引用,一维为引用类型,所以为null)
//System.out.println(arr10[1][0]);//或报错空指针,前面没有指针后面就没有
6)数组的内存解析[根据图片分析]
相关练习
练习一
获取arr数组中的所有元素和。 j=0 j=1 j=2 j=3 i=0 3 5 8 - i=1 12 9 - - i=2 7 0 6 4
public static void main(String[] args) {
int sum = 0;
int[][] arr = new int[][]{{3, 5, 8}, {12, 9}, {7, 0, 6, 4}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
//System.out.print(arr[i][j] + " ");//查看输出的表是否正确
sum += arr[i][j];//计算总和
}
//System.out.println();
}
System.out.println("arr数组中的所有元素和为:" + sum);
}
练习二
声明:int[] x,y[];
在给x,y变量赋值以后,以下选项允许通过编译的是:
a) x[0]=y; b) y[0]=x; c) y[0][0]=x; d) x[0][0]=y; e) y[0][0]=x[0]; f) x=y;
/*
[先确定x,y的类型,再看变量之间的赋值规则。]
声明:int[] x,y[];
x是一个一维数组,y是一个二维数组。
在给x,y变量赋值以后,以下选项允许通过编译的是:
a) x[0]=y; no//y是二维的,x是int型的一个数。
b) y[0]=x; yes//x是一维的,y是一维一个元素。
c) y[0][0]=x; no//x是一维的,y是int型的一个数。
d) x[0][0]=y; no//x的写法都是错的。
e) y[0][0]=x[0]; yes//两边都是int型的一个数。
f) x=y; no//y是二维的,x是一维的.
*/
练习三
使用二维数组打印一个10行的杨辉三角。 1.第一行有1个元素,第n行有n个元素。 2.每一行的第一个元素和最后一个元素都是1. 3.从第三行开始,对于非第一个元素和最后一个元素的元素 即,num[i][j]=num[i-1][j-1]+num[i-1][j]; 【0】1 【1】1 1 【2】1 2 1 【3】1 3 3 1 【4】1 4 6 4 1 ...
public static void main(String[] args) {
//首先声明并初始化二维数组
int[][] num = new int[10][];
//【不能在此处定义内层元素,否则出来的值就是一样的了】
//给数组的元素赋值
for (int i = 0; i < num.length; i++) {
num[i] = new int[i + 1];//注意一行不是0而是1,所以加1。
//给首末元素赋值
num[i][0] = 1;
num[i][i] = 1;
//给非首末元素赋值
if (i > 1) {
//注意逻辑,此处要减去最后一项
for (int j = 1; j < num[i].length - 1; j++) {
num[i][j] = num[i - 1][j - 1] + num[i - 1][j];
}
}
}
//遍历
for (int i = 0; i < num.length; i++) {
for (int j = 0; j < num[i].length; j++) {
System.out.print(num[i][j] + " ");
}
System.out.println();
}
}
内容到此结束啦!!!