二维数组
1.定义:元素是一维数组的数组。
2.定义格式:
- A:数据类型[][] 数组名 = new 数据类型[m][n];
m:表示这个二维数组有多少个一维数组。
n:表示每一个一维数组的元素有多少个。 - B:数据类型[][] 数组名 = new 数据类型[m][];
m:表示这个二维数组有多少个一维数组。
列数没有给出,可以动态的给。
//定义数组
int[][] arr = new int[3][];
//动态的为每一个一维数组分配空间
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
- C:数据类型[][] 数组名 = new 数据类型[][]{{…},{…},{…}}; 或者
数据类型[][] 数组名 = {{…},{…},{…}};
//定义数组
int[][] arr = {{1,2,3},{4,5},{6}};
3.说明:
二维数组arr[m][n]中,arr是二维数组的地址,arr[m]是二维数组中的一维数组元素的首地址,arr[m][n]则是一维数组中对应的元素值。
其中,arr.length = m,arr[i].length = n.
4.内存图:
Java中的参数传递问题
1.基本类型:形式参数的改变对实际参数没有影响。
2.引用类型:形式参数的改变直接影响实际参数。
class ArgsDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b); //a:10,b:20
change(a,b);
System.out.println("a:"+a+",b:"+b); //??? a:10,b:20
int[] arr = {1,2,3,4,5};
change(arr);
System.out.println(arr[1]); //??? 4
}
public static void change(int a,int b) { //a=10,b=20
System.out.println("a:"+a+",b:"+b); //a:10,b:20
a = b; //a=20
b = a + b; //b=40
System.out.println("a:"+a+",b:"+b); //a:20,b:40
}
public static void change(int[] arr) { //arr={1,2,3,4,5};
for(int x=0; x<arr.length; x++) {
if(arr[x]%2==0) {
arr[x]*=2;
}
}
//arr={1,4,3,8,5};
}
}
代码对应的内存图如下:
例子:将数字按位数转化到数组:
static int[] Num2Arr(int num){
int [] arr = new int[8];
int index = 0;
while(num > 0){
arr[index] = num % 10;
index ++;
num /= 10;
}
return arr;
}