二维数组的使用

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}};
	//动态初始化1
	int[][] arr2 = new int[3][2];
	//动态初始化2
	int[][] arr3 = new int[3][];
	//这样也是正确的 但是不推荐
	//        int arr4[][];
	//        int[] arr4[];
	2.如何调用数组指定位置的元素
	 System.out.println(arr1[0][1]);//2
	 System.out.println(arr2[1][1]);//0
	 
	 arr6[1] = new int[2];
	 System.out.println(arr6[1][1]);//0
	
	3.获取数组的长度
	System.out.println(arr1.length);//3
	System.out.println(arr1[0].length);//3
	System.out.println(arr1[1].length);//3
	
	4.如何遍历二维数组
	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]); //NullPointerException
	System.out.println(arr); //[[I@1b6d3586

	int[][] arr1 = new int[3][4];
	System.out.println(arr1[0]);// [I@1b6d3586 地址值
	System.out.println(arr1[0][0]); //0
	System.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;

image

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 3
			4 5 6
			7 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 3
        4 5 6
        7 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);
posted @ 2025-01-04 00:40  吃俺老孙一棒槌  阅读(101)  评论(0)    收藏  举报