1:二维数组(理解)
(1)元素是一维数组的数组。
(2)格式:(四种格式)
A:数据类型[][] 数组名 = new 数据类型[m][n];
B:数据类型[][] 数组名 = new 数据类型[m][];
C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};
D:数据类型[][] 数组名 = {{...},{...},{...}};
(3)案例(掌握):
A:二维数组的遍历
B:二维数组的求和
C:杨辉三角形
Array2Demo.java
/* 二维数组:就是元素为一维数组的一个数组。 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组。 n:表示每一个一维数组的元素有多少个。 注意: A:以下格式也可以表示二维数组 a:数据类型 数组名[][] = new 数据类型[m][n]; b:数据类型[] 数组名[] = new 数据类型[m][n]; B:注意下面定义的区别 int x; int y; int x,y; int[] x; int[] y[]; int[] x,y[]; */ class Array2Demo { public static void main(String[] args) { //定义一个二维数组 int[][] arr = new int[3][2]; //定义了一个二维数组arr //这个二维数组有3个一维数组的元素 //每一个一维数组有2个元素 //输出二维数组名称 System.out.println(arr); //地址值 [[[email protected] //输出二维数组的第一个元素一维数组的名称 System.out.println(arr[0]); //地址值 [[email protected] System.out.println(arr[1]); //地址值 [[email protected] System.out.println(arr[2]); //地址值 [[email protected] //输出二维数组的元素 System.out.println(arr[0][0]); //0 System.out.println(arr[0][1]); //0 } }
二维数组格式1的内存图解:
Array2Demo2.java
/* 格式2: 数据类型[][] 数组名 = new 数据类型[m][]; m:表示这个二维数组有多少个一维数组。 列数没有给出,可以动态的给。这一次是一个变化的列数。 */ class Array2Demo2 { public static void main(String[] args) { //定义数组 int[][] arr = new int[3][]; System.out.println(arr); //[[[email protected] System.out.println(arr[0]); //null System.out.println(arr[1]); //null System.out.println(arr[2]); //null //动态的为每一个一维数组分配空间 arr[0] = new int[2]; arr[1] = new int[3]; arr[2] = new int[1]; System.out.println(arr[0]); //[[email protected] System.out.println(arr[1]); //[[email protected] System.out.println(arr[2]); //[[email protected] System.out.println(arr[0][0]); //0 System.out.println(arr[0][1]); //0 //ArrayIndexOutOfBoundsException //System.out.println(arr[0][2]); //错误 arr[1][0] = 100; arr[1][2] = 200; } }
二维数组格式2的内存图解:
Array2Demo3.java
/* 格式3: 基本格式: 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}}; 简化版格式: 数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}}; 举例: int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; int[][] arr = {{1,2,3},{4,5},{6}}; */ class Array2Demo3 { public static void main(String[] args) { //定义数组 int[][] arr = {{1,2,3},{4,5},{6}}; System.out.println(arr); System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[0][0]); //1 System.out.println(arr[1][0]); //4 System.out.println(arr[2][0]); //6 System.out.println(arr[0][1]); //2 System.out.println(arr[1][1]); //5 //越界 System.out.println(arr[2][1]); //错误 } }
二维数组格式3的内存图解:
Array2Test.java【二维数组遍历】
/* 需求:二维数组遍历 外循环控制的是二维数组的长度,其实就是一维数组的个数。 内循环控制的是一维数组的长度。 */ class Array2Test { public static void main(String[] args) { //定义一个二维数组 int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; //请问谁代表{1,2,3} //arr[0]就是第一个数组 //arr[0] = {1,2,3}; for(int x=0; x<arr[0].length; x++) { System.out.println(arr[0][x]); } System.out.println("--------------"); for(int x=0; x<arr[1].length; x++) { System.out.println(arr[1][x]); } System.out.println("--------------"); for(int x=0; x<arr[2].length; x++) { System.out.println(arr[2][x]); } System.out.println("--------------"); //用循环改进 for(int x=0; x<3; x++) { for(int y=0; y<arr[x].length; y++) { System.out.print(arr[x][y]+" "); } System.out.println(); } System.out.println("--------------"); //这个时候,注意了,3是我们根据上面的代码得出来的 //但是,它不能针对任何的数组都可以这样 //所以,我们应该想办法改进 //其实,外面的这个循环的长度就是二维数组的长度 for(int x=0; x<arr.length; x++) { for(int y=0; y<arr[x].length; y++) { System.out.print(arr[x][y]+" "); } System.out.println(); } System.out.println("--------------"); //用方法改进 //调用方法 printArray2(arr); System.out.println("--------------"); //我们再来一个列数是变化的 int[][] arr2 = {{1,2,3},{4,5},{6}}; printArray2(arr2); } /* 需求:遍历二维数组 两个明确: 返回值类型:void 参数列表:int[][] arr */ public static void printArray2(int[][] arr) { for(int x=0; x<arr.length; x++) { for(int y=0; y<arr[x].length; y++) { System.out.print(arr[x][y]+" "); } System.out.println(); } } }
Array2Test2.java【二维数组的求和】
/* 公司年销售额求和 某公司按照季度和月份统计的数据如下:单位(万元) 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 分析: A:把题目的数据用二维数组来表示 int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}}; B:如何求和呢? 求和其实就是获取到每一个元素,然后累加即可。 C:定义一个求和变量sum,初始化值是0。 D:通过遍历就可以得到每一个二维数组的元素。 E:把元素累加即可。 F:最后输出sum,就是结果。 */ class Array2Test2 { public static void main(String[] args) { //把题目的数据用二维数组来表示 int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}}; //定义一个求和变量sum,初始化值是0。 int sum = 0; //通过遍历就可以得到每一个二维数组的元素。 for(int x=0; x<arr.length; x++) { for(int y=0; y<arr[x].length; y++) { //把元素累加即可。 sum += arr[x][y]; } } //最后输出sum,就是结果。 System.out.println("一年的销售额为:"+sum+"万元"); } }
Array2Test3.java【打印杨辉三角】
/* 需求:打印杨辉三角形(行数可以键盘录入) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 分析:看这种图像的规律 A:任何一行的第一列和最后一列都是1 B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。 步骤: A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。 这个n的数据来自于键盘录入。 B:给这个二维数组任何一行的第一列和最后一列赋值为1 C:按照规律给其他元素赋值 从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。 D:遍历这个二维数组。 */ import java.util.Scanner; class Array2Test3 { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in); //这个n的数据来自于键盘录入。 System.out.println("请输入一个数据:"); int n = sc.nextInt(); //定义二维数组 int[][] arr = new int[n][n]; //给这个二维数组任何一行的第一列和最后一列赋值为1 for(int x=0; x<arr.length; x++) { arr[x][0] = 1; //任何一行第1列 arr[x][x] = 1; //任何一行的最后1列 } //按照规律给其他元素赋值 //从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。 for(int x=2; x<arr.length; x++) { //这里如果y<=x是有个小问题的,就是最后一列的问题 //所以这里要减去1 //并且y也应该从1开始,因为第一列也是有值了 for(int y=1; y<=x-1; y++) { //每一个数据是它上一行的前一列和它上一行的本列之和。 arr[x][y] = arr[x-1][y-1] + arr[x-1][y]; } } //遍历这个二维数组。 /* for(int x=0; x<arr.length; x++) { for(int y=0; y<arr[x].length; y++) { System.out.print(arr[x][y]+"\t"); } System.out.println(); } */ //这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似 for(int x=0; x<arr.length; x++) { for(int y=0; y<=x; y++) { System.out.print(arr[x][y]+"\t"); } System.out.println(); } } }
时间: 2024-10-08 10:13:59