二维数组

164 阅读4分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

Demo1_Array

/*
* A:二维数组概述
* B:二维数组格式1
	* int[][] arr = new int[3][2]; 
* C:二维数组格式1的解释
* D:注意事项
	* a:以下格式也可以表示二维数组
		* 1:数据类型 数组名[][] = new 数据类型[m][n];
		* 2:数据类型[] 数组名[] = new 数据类型[m][n];
	* B:注意下面定义的区别
	* 
			int x;
			int y;
			int x,y;
			
			int[] x;
			int[] y[];
			
			int[] x,y[];	x是一维数组,y是二维数组
* E:案例演示
	* 定义二维数组,输出二维数组名称,一维数组名称,一个元素
*/
class Demo1_Array {
	public static void main(String[] args) {
		int[][] arr = new int[3][2];
		/*
		这是一个二维数组
		这个二维数组中有3个一维数组
		每个一维数组中有2个元素

		[[I@7852e922									//二维数组的地址值
		[I@4e25154f									//一维数组的地址值
		0											//元素值
		*/
		System.out.println(arr);					//二维数组
		System.out.println(arr[0]);					//二维数组中的第一个一维数组
		System.out.println(arr[0][0]);				//二维数组中的第一个一维数组的第一个元素
	}
}

Demo2_Array

/*
* A:画图演示
	* 画图讲解上面的二维数组名称,一维数组名称,一个元素的值的问题
*/
class Demo2_Array {
	public static void main(String[] args) {
		int[][] arr = new int[3][2];
		System.out.println(arr);					//打印二维数组
		System.out.println(arr[0]);					//打印二维数组中的第一个一维数组
		System.out.println(arr[0][0]);				//打印二维数组中的第一个一维数组中的第一个元素
	}
}

Demo3_Array

/*
* A:二维数组格式2
	* int[][] arr = new int[3][]; 
* B:二维数组格式2的解释
* C:案例演示
	* 讲解格式,输出数据,并画内存图
*/
class Demo3_Array {
	public static void main(String[] args) {
		int[][] arr = new int[3][];				//这是一个二维数组,这个二维数组中有三个一维数组,三个一维数组都没有被赋值
		
		System.out.println(arr[0]);    // null
		System.out.println(arr[1]);    // null
		System.out.println(arr[2]);    // null
		arr[0] = new int[3];					//第一个一维数组中可以存储三个int值
		arr[1] = new int[5];					//第二个一维数组中可以存储五个int值
		System.out.println("------------------");
		System.out.println(arr[0]);     //[I@7852e922
		System.out.println(arr[1]);     //[I@4e25154f
		System.out.println(arr[2]);     //null
	}
}

Demo4_Array

/*
* A:二维数组格式3
	* int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; 
* B:二维数组格式3的解释
* C:案例演示
	* 讲解格式,输出数据,并画内存图
*/
class Demo4_Array {
	public static void main(String[] args) {
		int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; //这是一个二维数组,这个二维数组中每个大括号都代表一个一维数组
		System.out.println(arr);				//[[I@19bb25a,二维数组的地址值
		System.out.println(arr[0]);				//[I@da6bf4,一维数组的地址值
		System.out.println(arr[0][0]);			//1,一维数组中的元素值
	}
}

Test1_Array

/*
* A:案例演示
	* 需求:二维数组遍历

	* 外循环控制的是二维数组的长度,其实就是一维数组的个数。
	* 内循环控制的是一维数组的长度。

*/
class Test1_Array {
	public static void main(String[] args) {
		int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};

		for (int i = 0;i < arr.length ;i++ ) {			//获取到每个二维数组中的一维数组
			for (int j = 0;j < arr[i].length ;j++ ) {	//获取每个一维数组中的元素
				System.out.print(arr[i][j] + " ");
			}

			System.out.println();
		}
	}
}

Test2_Array

/*
* A:案例演示
* 
		需求:公司年销售额求和
		某公司按照季度和月份统计的数据如下:单位(万元)
		第一季度:22,66,44
		第二季度:77,33,88
		第三季度:25,45,65
		第四季度:11,66,99
*/
class Test2_Array {
	public static void main(String[] args) {
		int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};

		int sum = 0;									//定义变量,记录每次相加的结果
		for (int i = 0;i < arr.length ;i++ ) {			//获取每一个一维数组
			for (int j = 0;j < arr[i].length ;j++ ) {	//获取每一个一维数组中的元素
				sum = sum + arr[i][j];					//累加
			}
		}

		System.out.println(sum);
	}
}

Test3_Array

/*
基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问

Java中到底是传值还是传址
1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址
2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父))
*/
class Test3_Array {
	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]);
	}

	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) {			//1,4,3,8,5
		for(int x=0; x<arr.length; x++) {
			if(arr[x]%2==0) {
				arr[x]*=2;
			}
		}
	}
}