day08_二维数组

二维数组

概述

Java 语言里提供了支持多维数组的语法。 如果说可以把一维数组当成几何中的线性图形, 那么二维数组就相当于是一个表格。 对于二维数组的理解,我们可以看成是一维数组 又作为另一个一维数组的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。

格式1:

  • 数据类型[] [] 数组名称 = new 数据类型[一维数组的个数][每个一维数组中的元素个数]
       /*
        定义了名称为arr的二维数组
        二维数组中有3个一维数组
        每一个一维数组中有2个元素
        一维数组的名称分别为arr[0], arr[1], arr[2]
         */
        int[][] arr = new int[3][2];
        //  给第一个一维数组1索引位赋值为78写法是:
        arr[0][1] = 78;

格式2

  • 数据类型[][] 数组名称 = new 数据类型[一维数组的个数][];
package demo01;
 
public class DemoArray {
 
    public static void main(String[] args) {
        /*
        二维数组中有3个一维数组。
        每个一维数组都是默认初始化值null (注意:区别于格式1)
        */
        int[][] arr = new int[3][];
        //可以对这个三个一维数组分别进行初始化
        arr[0] = new int[3];
        arr[1] = new int[1];
        arr[2] = new int[2];
        //int[][]arr = new int[][3]; 错误
 
    }
 
}

格式3:

  • 数据类型[] [] 数组名称 = new 数据类型 [][]{{具体的数据值}};
 
       /*
       定义一个名称为arr的二维数组,二维数组中有三个一维数组
        每一个一维数组中具体元素也都已初始化
        第一个一维数组 arr[0] = {3,8,2};
        第二个一维数组 arr[1] = {2,7};
        第三个一维数组 arr[2] = {9,0,1,6};
        第三个一维数组的长度表示方式:arr[2].length;
       
      */
        int[][] arr = new int[][]{{3, 8, 2}, {2, 7}, {9, 0, 1, 6}};
 
        //注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
        //Java中多维数组不必都是规则矩阵形式
        int[] arr4[] = new int[][]{{1, 2, 3}, {4, 5, 9, 10}, {6, 7, 8}};
        int[] arr5[] = {{1, 2, 3}, {4, 5}, {6, 7, 8}};

二维数组的基本使用

二维数组分为外层数组的元素,内层数组的元素。例如: int[][] arr = new int[4][3];

  • 外层元素:arr[0],arr[1]等
  • 内层元素:arr[0][0],arr[1][2]等

针对于初始化方式一:比如:int[][] arr = new int[4][3];

  • 外层元素的初始化值为:地址值
  • 内层元素的初始化值为:与一维数组初始化情况相同

针对于初始化方式二:比如:int[][] arr = new int[4][];

  • 外层元素的初始化值为:null
  • 内层元素的初始化值为:不能调用,否则报错。
package demo01;
 
 
public class ArrayTest2 {
    public static void main(String[] args) {
        //1.二维数组的声明和初始化
        int[] arr = new int[]{1, 2, 3};//一维数组
        //静态初始化
        int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
        //动态初始化1
        String[][] arr2 = new String[3][2];
        //动态初始化2
        String[][] arr3 = new String[3][];
        //也是正确的写法:
        int[] arr4[] = new int[][]{{1, 2, 3}, {4, 5, 9, 10}, {6, 7, 8}};
        int[] arr5[] = {{1, 2, 3}, {4, 5}, {6, 7, 8}};
 
        //2.如何调用数组的指定位置的元素
        System.out.println(arr1[0][1]);//2
        System.out.println(arr2[1][1]);//null
 
        arr3[1] = new String[4];
        System.out.println(arr3[1][0]);
 
        //3.获取数组的长度
        System.out.println(arr4.length);//3
        System.out.println(arr4[0].length);//3
        System.out.println(arr4[1].length);//4
 
        //4.如何遍历二维数组
        for (int i = 0; i < arr4.length; i++) {
            for (int j = 0; j < arr4[i].length; j++) {
                System.out.print(arr4[i][j] + "  ");
            }
            System.out.println();
        }
 
    }
}

练习题

  • 求和
 
public class ArrayExer1 {
 
    public static void main(String[] args) {
        //求二维数组的和
        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);//总和为:54
    }
 
}
  • 求数值型数组中元素的最大值、最小值、平均数、总和等
package demo01;
 
/*
求数值型数组中元素的最大值、最小值、平均数、总和等
 *
 * 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,
 * 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
 * 要求:所有随机数都是两位数。
 *
 * [10,99]
 * 公式:(int)(Math.random() * (99 - 10 + 1) + 10)
 *
 */
public class ArrayTest1 {
    public static void main(String[] args) {
        int[] arr = new int[10];
 
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
        }
 
        //遍历
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
 
        //求数组元素的最大值
        int maxValue = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (maxValue < arr[i]) {
                maxValue = arr[i];
            }
        }
        System.out.println("最大值为:" + maxValue);
 
        //求数组元素的最小值
        int minValue = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (minValue > arr[i]) {
                minValue = arr[i];
            }
        }
        System.out.println("最小值为:" + minValue);
        //求数组元素的总和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("总和为:" + sum);
        //求数组元素的平均数
        int avgValue = sum / arr.length;
        System.out.println("平均数为:" + avgValue);
    }
}

数组作为方法参数

以前的方法中我们学习了方法的参数和返回值,但是使用的都是基本数据类型。那么作为引用类型的数组能否作为方法的参数进行传递呢,当然是可以的。

  • 数组作为方法参数传递:传递的参数是数组内存的地址。 
  • 数组作为方法的返回值:返回的是数组的内存地址 

注意

  • 方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值

Arrays工具类的使用

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比 如排序和搜索)的各种方法。

       

方法演示

 
import java.util.Arrays;
 
/*
 * java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法
 * 
 * 
 */
public class ArraysTest {
	public static void main(String[] args) {
		
		//1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
		int[] arr1 = new int[]{1,2,3,4};
		int[] arr2 = new int[]{1,3,2,4};
		boolean isEquals = Arrays.equals(arr1, arr2);
		System.out.println(isEquals);
		
		//2.String toString(int[] a):输出数组信息。
		System.out.println(Arrays.toString(arr1));
		
			
		//3.void fill(int[] a,int val):将指定值填充到数组之中。
		Arrays.fill(arr1,10);
		System.out.println(Arrays.toString(arr1));
		
 
		//4.void sort(int[] a):对数组进行排序。
		Arrays.sort(arr2);
		System.out.println(Arrays.toString(arr2));
		
		//5.int binarySearch(int[] a,int key)
		int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
		int index = Arrays.binarySearch(arr3, 210);
		if(index >= 0){
			System.out.println(index);
		}else{
			System.out.println("未找到");
		}
		
		
	}
}
发布了20 篇原创文章 · 获赞 7 · 访问量 6622

猜你喜欢

转载自blog.csdn.net/weixin_44462792/article/details/105003228