《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(); } } }
案例二:
公司季度营业额求和。(考察二维数组的遍历在实际中的应用,学会转换)
/* 公司年销售额求和 某公司按照季度和月份统计的数据如下:单位(万元) 第一季度: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+"万元"); } }
案例三:
打印杨辉三角形(行数可以键盘录入)
/* 需求:打印杨辉三角形(行数可以键盘录入) 1 1 1 1 2 1 1 3 3 1 1 4 6 (4) 1 1 5 10 10 5 1 分析:看这种图像的规律 A:任何一行的第一列和最后一列都是1 B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。如(4)=3+1 步骤: 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开始,因为第一列也是有值了,第一列不用再赋值,所以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<=x; y++) {//注意这里不是写成y<arr[x].length,要实现“阶梯形状”的固定写法y<=x。与九九乘法表类似 System.out.print(arr[x][y]+"\t"); } System.out.println(); } } }