1.二位数组的理解
Java 语言里提供了支持多维数组的语法
如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像右图Excel中的表格一样。
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。
二维数组:数组中的数组。
2.二维数组的声明方式
int[][] arr;
//这样也是正确的 但是不推荐
// int arr[][];
// int[] arr[];
3.二维数组的初始化
(1)格式1(动态初始化)
int[][] arr1 = new int[3][2];
- 定义了名称为arr的二维数组
- 二维数组中有3个一维数组
- 每一个一维数组中有2个元素
- 一维数组的名称分别为arr[0], arr[1], arr[2]
- 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
(2)格式2(动态初始化)
int[][] arr = new int[3][];
- 二维数组中有3个一维数组。
- 每个一维数组都是默认初始化值null (注意:区别于格式1)
- 可以对这个三个一维数组分别进行初始化
arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2]; - 注:
int[][]arr = new int[][3]; //非法
(3)格式三(静态初始化)
int[][] arr3 = new int[][]{{3,8,2},{2,7},{9,0,1,6}}
- 定义一个名称为arr的二维数组,二维数组中有三个一维数组
- 每一个一维数组中具体元素也都已初始化
- 第一个一维数组 arr[0] = {3,8,2};
- 第二个一维数组 arr[1] = {2,7};
- 第三个一维数组 arr[2] = {9,0,1,6};
- 第三个一维数组的长度表示方式:arr[2].length;
- 注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
- Java中多维数组不必都是规则矩阵形式
1.初始化//静态初始化int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8}};//动态初始化1int[][] arr2 = new int[3][2];//动态初始化2int[][] arr3 = new int[3][];//这样也是正确的 但是不推荐// int arr4[][];// int[] arr4[];2.如何调用数组指定位置的元素System.out.println(arr1[0][1]);//2System.out.println(arr2[1][1]);//0arr6[1] = new int[2];System.out.println(arr6[1][1]);//03.获取数组的长度System.out.println(arr1.length);//3System.out.println(arr1[0].length);//3System.out.println(arr1[1].length);//34.如何遍历二维数组for(int i = 0; i < arr1.length; i++){for (int j = 0; j < arr1[i].length; j++){System.out.print(arr1[i][j] + " ");}System.out.println();}
4.数组元素的默认初始值
//5、数组元素的默认初始化值//int类型int[][] arr = new int[3][];System.out.println(arr[0]);// null// System.out.println(arr[0][0]); //NullPointerExceptionSystem.out.println(arr); //[[I@1b6d3586int[][] arr1 = new int[3][4];System.out.println(arr1[0]);// [I@1b6d3586 地址值System.out.println(arr1[0][0]); //0System.out.println(arr1); //[[I@74a14482//float类型float[][] arr3 = new float[3][4];System.out.println(arr3[0]);// [F@1540e19d 地址值System.out.println(arr3[0][0]); //0.0//String类型String[][] arr4 = new String[3][4];System.out.println(arr4[0]);// [Ljava.lang.String;@677327b6 地址值System.out.println(arr4[0][0]); //null
5.二维数组的内存解析
int[][] arr1 = new int[4][];arr1[1] = new int[]{1,2,3};arr1[2] = new int[4];
arr1[2][1] = 30;
6.二维数组的练习
练习1
public class Array2Test1 {public static void main(String[] args) {//1、练习1 计算数组中所有元素的和int[][] arr = {{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 = " + sum);}}
练习2
import java.util.Random;public class Array2Test2 {public static void main(String[] args) {//输入几 就打印几行几列 如:/*1 2 34 5 67 8 9*/int num = 3;for (int i = 1; i <= num; i++){for (int j = num * i - num + 1; j < num * i + 1; j++){System.out.print(j + " ");}System.out.println();}System.out.println();/*定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。要求:所有随机数都是两位数。*/int[] arr = new int[10];//给数组赋值for (int i = 0; i < arr.length; i++){arr[i]= (int)(Math.random() * 90 + 10);}int max;//最大值int min;//最小值int sum = 0;//和值double average;//平均值max = min = arr[0];for (int i = 0; i < arr.length; i++){//获取最大值if (max < arr[i]){max = arr[i];}//获取最小值if (min > arr[i]){min = arr[i];}sum += arr[i];}average = sum / (double)arr.length;for (int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.println("最大值:" + max);System.out.println("最小值:" + min);System.out.println("和值:" + sum);System.out.println("平均值:" + average);}}
练习3
//输入几 就打印几行几列 如:/*1 2 34 5 67 8 9*/int num = 3;for (int i = 1; i <= num; i++){for (int j = num * i - num + 1; j < num * i + 1; j++){System.out.print(j + " ");}System.out.println();}System.out.println();/*定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。要求:所有随机数都是两位数。*/int[] arr = new int[10];//给数组赋值for (int i = 0; i < arr.length; i++){arr[i]= (int)(Math.random() * 90 + 10);}int max;//最大值int min;//最小值int sum = 0;//和值double average;//平均值max = min = arr[0];for (int i = 0; i < arr.length; i++){//获取最大值if (max < arr[i]){max = arr[i];}//获取最小值if (min > arr[i]){min = arr[i];}sum += arr[i];}average = sum / (double)arr.length;for (int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.println("最大值:" + max);System.out.println("最小值:" + min);System.out.println("和值:" + sum);System.out.println("平均值:" + average);