二维数组的理解
- 对于二维数组的理解,可以看成是一维数组array1又作为另一个一维数组array2的元素存在
- 其实,从数组底层的运行机制来看,其实没有多维数组
- 概念:数组外层元素、数组内层元素
二维数组的使用(6个基本点)
- 数组的声明和初始化
- 调用数组的制定元素
- 数组的属性:length,表示数组的长度
- 数组遍历
数组元素的默认初始化初值
- 动态数组初始化方式: int [] [] arr = new int[3][4]
外层元素,默认存储地址值
内层元素,默认与一维数组元素的默认规定相同
- 整型数组元素的默认初始化值:0
浮点型数组元素的默认初始化值:0.0
字符型数组元素的默认初始化值:0(或理解为‘\u0000’)
boolean型数组元素的默认初始化值;false
引用数据类型元素的默认初始化值:null- 动态初始化方式2:int [] [] arr = new int[3][]
外层元素:默认存储地址
内存元素,不存在的。如果调用会报错(NullPointerException)
二维数组的内存解析(难)
package ArrayTest;
public class TwoArrayTest {
public static void main(String[] args) {
//1、数组的声明与初始化
//方式1:静态初始化:数组变量的赋值和数组元素的赋值同时进行
int [] [] arr2 = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
//方式2:动态初始化:数组变量的赋值和数组元素的赋值分开进行
String [][] arr3 = new String[3][4];
//方式2:动态初始化2
double [] [] arr4 = new double[2][];
//2、数组元素的调用
//针对arr2来说,外层元素是{1,2,3} {4,5} {6,7,8,9} 内层元素是 1 2 3 4 5 6 7 8 9
//调用内层元素
System.out.println(arr2[0][0]);//1
System.out.println(arr2[2][1]);//7
//调用外层元素
System.out.println(arr2[0]);//[I@2dda6444
//测试 arr3、arr4 String [][] arr3 = new String[3][4]; double [] [] arr4 = new double[2][];
arr3[0][1]="Tom";
System.out.println(arr3[0][1]);//Tom
System.out.println(arr3[0]);//[Ljava.lang.String;@5e9f23b4
arr4[0] = new double[4];
arr4[0][0] = 1.0;
//3、数组的长度
System.out.println(arr2.length);//3
System.out.println(arr2[1].length);//2
//4.如何遍历数组
for(int i=0;i<arr2.length;i++){
for(int j=0;j<arr2[i].length;j++){
System.out.print(arr2[i][j]+"\t");
}
System.out.println("");
}
//5、数组元素的默认初始值
int [][] arr11= new int[3][2];
//外层元素默认值
System.out.println(arr11[0]);//[I@4783da3f
System.out.println(arr11[1]);//[I@378fd1ac
//内层元素默认值
System.out.println(arr11[0][0]);//0
boolean [] [] arr22 = new boolean[3][4];
System.out.println(arr22[0]);//[Z@49097b5d
System.out.println(arr22[1]);//[Z@6e2c634b
System.out.println(arr22[0][0]);//false
String [][] arr33 = new String[3][4];
System.out.println(arr33[0]);//[Ljava.lang.String;@37a71e93
System.out.println(arr33[0][0]);//null
char [][] arr44 = new char[3][4];
System.out.println(arr44[0]); //0
System.out.println(arr44[0][0]);//0
//***************************************
//二维数组第二种方式初始化
int arr5 [][] = new int[3][];
//外层元素默认值
System.out.println(arr5[0]);//地址值 null
//内层元素默认值
System.out.println(arr5[0][0]);//报错
}
}
练习
package ArrayTest;
public class TwoArrayExer {
public static void main(String[] args) {
//案例一:获取arr数组中所有元素的和
// int [][] arr = new int[3][4];
// arr[0][2]=5;
// arr[2][3]=9;
int [][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
int sum=0;
for(int i=0;i< arr.length;i++){
for(int j=0;j<arr[i].length;j++){
sum+=arr[i][j];
}
}
System.out.println(sum);
//案例二:10:普通职员; 11:程序员;12:设计师;13:架构师
String [][] str = new String[][]{{"10","1","短语","22","3000"},{"13","2","令狐冲","32","18000","15000","2000"},{"11","3","任我行","23","7000"},{"12","4","张三丰","24","7300"}};
System.out.println("员工类型\t\t编号\t\t姓名\t\t年龄\t\t薪资\t\t奖金\t\t股票");
for(int i1 = 0;i1<str.length;i1++){
for(int j1=0;j1<str[i1].length;j1++){
if(str[i1][0]=="10"){
str[i1][0] = "普通职员";
}else if(str[i1][0]=="11"){
str[i1][0] = "程序员";
}else if(str[i1][0]=="12"){
str[i1][0] = "设计师";
}else if(str[i1][0]=="13"){
str[i1][0] = "架构师";
}
System.out.print(str[i1][j1]+"\t\t");
}
System.out.println();
}
}
}