java基础-引用数据类型之二维数组(Array)
java基础-引用数据类型之二维数组(Array)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换句话说,就是数组中的数组,数组里面存储的还是数组。数组中的元素类型可以是基本数据类型,也可以是引用数据类型,当元素类型是一维数组时,就构成了二维数组。
一.二维数组的定义
定义方式和以为数组很相似,比如“int[][] arr = new int[3][4];”,其中“[3]”表示:二维数组中,有三个一维数组,“[4]”表示三个一位数组的长度都是4。这也就意味着这个二维数组可以存储12个int类型的数字。接下来我们给大家介绍一下数组的定义方式
1>.定义方式一,指定二维数组的长度和一维数组的长度;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class arrayArrayDemo{ 8 public static void main(String[] args){ 9 int[][] arr = new int[3][4]; //当然你也可以定义多维的,比如三维四维的数字,但是不建议这么干! 10 System.out.println(arr); 11 System.out.println(arr[1]); 12 System.out.println(arr[2][3]); 13 } 14 }
2>.只指定二维数组的长度(不推荐使用)
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class arrayArrayDemo1{ 8 public static void main(String[] args){ 9 String[][] arr = new String[3][]; //二维数组中定义三个以为数组,每个数组长度没有指定。 10 arr[0] = new String[5]; 11 arr[1] = new String[10]; //每次在使用时,必须要用关键字new创建数组的长度方可使用。 12 arr[2] = new String[3]; 13 arr[2][1] = "yinzhengjie"; 14 for(int index = 0;index<arr[2].length;index++){ 15 System.out.println(arr[2][index]); 16 } 17 } 18 }
3>.直接初始化二维数组和一维长度
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class arrayArrayDemo2{ 8 public static void main(String[] args){ 9 int[][] arr = {{1,2,3},{4,5,},{6,7,8,9},{0}}; 10 11 System.out.println(arr[2][1]); 12 13 } 14 }
二.二维数组内存图
以下是二维数组存储的简要内存图:
三.二维数组的遍历
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class arrayArrayDemo2{ 8 public static void main(String[] args){ 9 int[][] arr = {{1,2,3},{4,5,},{6,7,8,9},{0}}; 10 11 //外循环,遍历的是二维数组 12 for(int i = 0;i<arr.length;i++){ 13 //内循环,遍历的是每一个一维数组,因此长度因为:arr[i].length 14 for(int j = 0;j < arr[i].length;j++){ 15 System.out.println(arr[i][j]); 16 } 17 } 18 } 19 }
四.小时牛刀
1>.公司年销售额求和
例如要统计一下公司三个销售小组中每个小组的总销售额以及公司的销售额。如下所示:
第一个小组销售额为:220,604,505,730万元。
第二个小组销售额为:201,110,202,301,330万元。
第三个小组销售额为:807,202,205,450,651,606,903万元。
第四个小组销售额为:307,408,970万元。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class arrayArrayDemo3{ 8 public static void main(String[] args){ 9 int[][] arr = new int[4][]; 10 arr[0] = new int[]{220,604,505,730}; 11 arr[1] = new int[]{201,110,202,301,330}; 12 arr[2] = new int[]{807,202,205,450,651,606,903}; 13 arr[3] = new int[]{307,409,970}; 14 15 int groupSummation = 0,totalCompany = 0; 16 int[] groupArrary = new int[4]; 17 18 //外循环,遍历二维数组 19 for(int groupNumber = 0;groupNumber<arr.length;groupNumber++){ 20 //内循环,遍历一维数组 21 for(int groupMember = 0;groupMember <arr[groupNumber].length;groupMember++){ 22 groupSummation += arr[groupNumber][groupMember]; 23 } 24 //将每个小组的销售总额加起来。 25 groupArrary[groupNumber] = groupSummation; 26 System.out.printf("第[%d]小组的销售总额是:[%d]\n",groupNumber+1,groupSummation); 27 //将当前小组的销售总额清空,方便计算下一个小组的销售总额度。 28 groupSummation = 0; 29 } 30 31 //公司总的销售额度 32 for(int groupNumber = 0;groupNumber<groupArrary.length;groupNumber++){ 33 totalCompany+=groupArrary[groupNumber]; 34 } 35 System.out.printf("公司的销售总额是:[%d]\n",totalCompany); 36 } 37 }
2>.随机点名器
随机点名器,即在全班同学中随机的打印出一名同学名字,要做的随机点名器,它具备以下3个内容:
a>.存储所有同学姓名;
b>.总览全班同学姓名;
c>.随机点名其中一人,打印到控制台;
班级名单如下: 第[1]组成员:尹正杰 周杰伦 张杰 第[2]组成员:张娜拉 邓紫棋 古天乐 刘德华 第[3]组成员:刘邦 项羽 项少龙 以下被点名的学员是:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 import java.util.Random; 8 9 public class callName{ 10 public static void main(String[] args){ 11 String[][] nameList = {{"尹正杰","周杰伦","张杰"},{"张娜拉","邓紫棋","古天乐","刘德华"},{"刘邦","项羽","项少龙"}}; 12 13 System.out.println("班级名单如下:"); 14 for(int i=0;i<nameList.length;i++){ 15 System.out.format("\t\t第[%d]组成员:",i+1); 16 for(int j =0;j<nameList[i].length;j++){ 17 System.out.print(nameList[i][j]+"\t"); 18 } 19 System.out.println(); 20 } 21 22 System.out.println("以下被点名的学员是:"); 23 int index = getIndex(nameList); 24 int nameIndex = getIndex(nameList[index]); 25 System.out.printf("\t\t被点名的学员是第[%d]组的[%s]\n",index+1,nameList[index][nameIndex]); 26 } 27 28 //用于确定随机的二维数组的索引 29 public static int getIndex(String[][] args){ 30 int index; 31 Random ran = new Random(); 32 index = ran.nextInt(args.length); 33 return index ; 34 } 35 36 //用于确定一维数组的索引 37 public static int getIndex(String[] args){ 38 int index; 39 Random ran = new Random(); 40 index = ran.nextInt(args.length); 41 return index ; 42 } 43 }
3>.杨辉三角形案例
还记得我们上学那会数学里面学习的二项式通式吗?如:"(a+b)^2"和"(a+b)^3"以及"(a+b)^n"他们展开的二项式通式的系数吗?我们就可以用二维数组来实现,代码如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class YangHuiDemo{ 8 public static void main(String[] args){ 9 int[][] arr = new int[8][]; 10 //变量二维数组,动态给每个元素赋值 11 for(int i = 0;i<arr.length;i++){ 12 arr[i] = new int[i + 1]; 13 14 //给每个元素赋值 15 for(int j = 0;j<arr[i].length;j++){ 16 if(j == 0 || j == arr[i].length - 1){ 17 arr[i][j] = 1; 18 }else{ 19 arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1]; 20 } 21 } 22 } 23 24 for(int i = 0;i<arr.length;i++){ 25 for(int j = 0;j<arr[i].length;j++){ 26 System.out.print(arr[i][j] + "\t"); 27 } 28 System.out.println(); 29 } 30 31 } 32 }
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/8729228.html,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。