二维数组
什么是二维数组
二维数组的初始化
静态初始化
动态初始化
#二维数组的赋值
二维数组数组的内存图例
#二维数组的遍历
三维数组的理解
二维数组就是在一维数组的基础上,把每个元素变成了一个数组,那么同理,三维数组
就是在二维数组的基础_上,把二维数组中的元素又变成了一个数组,虽然我们可以通过
Java代码来实现,但是实际操作中,很少有使用场景,了 解其原理即可;
不建议使用 有点复杂
二维数组的案例
1、二维数组以及多位数组的定义方式
//1、二维数组的定义方式
//1.1、静态初始化
int [] arr1 = {1,2,3};
int [][] arr2 = {{1,2,3},{4,5,6},{7,8,9,10}};
int [][][] arr3 = {
{
{1,2,3},
{4,5,6},
{7,8,9}
},
{
{10,11,12},
{13,14,15},
{16,17,18}
},
{
{19,20,21},
{22,23,24},
{25,26,27}
}
};
//1.2、动态初始化
int [][] arr4 = new int[][] {};
int [][] arr5 = {};
int [][] arr6 = new int[3][];//不能写后面的大括号,以及必须要有高维度的大小
// int [][] arr7 = new int[][4];//不允许这样写
int [][] arr8 = new int[3][10];
2、获取数据以及赋值的方式
//int [][] arr2 = {{1,2,3},{4,5,6},{7,8,9,10}};
System.out.println(arr2[1][1]);
//int [][] arr6 = new int[3][];
//因为我们只定义了数组的一维长度为3,而它的二维长度并没有定义,如果没有定义就相当于你的一维元素的地方
//是一个null,所以这样调用的话,就会报空指针异常
// arr6[0][9] = 100;
//int [][] arr8 = new int[3][10];
arr8[0][9] = 100;
arr8[1][2] = 200;
arr8[2][5] = 300;
System.out.println(arr8[0][9]+","+arr8[1][2]+","+arr8[2][5]);
3、for循环遍历
//3.1、for循环
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();//换行
}
System.out.println();
//3.2、直接进行一次for循环,然后在循环体内使用Arrays.toString();
for(int i = 0;i<arr2.length;i++) {
System.out.println(Arrays.toString(arr2[i]));
}
//3.3、foreach循环
for(int[] i : arr2) {
for(int j:i) {
System.out.print(j+"\t");
}
System.out.println();
}
练习
用随机数对象产生0---1000范围内的整数,用以初始化-个8*8的二维数组,然后编程
把随机数放入到二维数组中去,并且找出二维数组中的最大数和最小数,并将其交换位置。
要求输出原始二维数组及交换后的二维数组 (不考虑最大值最小值有重复的情况) ;
//1、定义出一个8*8的二维数组
int [][] arr = new int[8][8];
//2、需要使用到随机数,所以要创建一个Random对象
Random ran = new Random();
//3、针对二维数组进行循环
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
arr[i][j] = ran.nextInt(1001);//0~1000
}
}
//4、输出二维数组最初的样子
for(int i = 0;i<arr.length;i++) {
System.out.println(Arrays.toString(arr[i]));
}
//5、定义一个最大值max和最小值min,以及最大值的x和y,以及最小值的x和y
int max = Integer.MIN_VALUE;//比0小的数值;
int min = Integer.MAX_VALUE;//比1000大的数值;
int maxX = 0,maxY = 0,minX = 0,minY = 0;
//6、对二维数组进行遍历,遍历的过程中,拿出每个元素来跟max和min进行比较
//如果元素比max大,则把元素赋值给max,并且把元素的i和j分别赋值给x和y,如果元素比min小,则同理;
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
if(arr[i][j]>max) {
max = arr[i][j];
maxX = i;
maxY = j;
}
if(arr[i][j]<min) {
min = arr[i][j];
minX = i;
minY = j;
}
}
}
//7、测试我们获取到的max和min是否对
System.out.println("max:"+max+",maxX:"+maxX+",maxY:"+maxY);
System.out.println("min:"+min+",minX:"+minX+",minY:"+minY);
//8、交换这两个最大值和最小值的位置即可
arr[maxX][maxY] = min;
arr[minX][minY] = max;
//9、输出交换完位置的二维数组
System.out.println("---------------------------------------------");
for(int i = 0;i<arr.length;i++) {
System.out.println(Arrays.toString(arr[i]));
}