导论
二维数组是一种常见的数据储存结构。JAVA中的二维数组允许不规则。
二维数组其实就是一维数组中装了一个数组
比如: {{1,2,3},{4,5,6},{7,8,9}}
这就是一个标准的二维数组。
它的[0][0]的值是1,它的[2][2]的值是9
二维数组的定义方法是
int array[][]=new int[3][3]; //定义一个3*3的二维数组 需要通过new
或
int twoarray[][] = {{1,2,3},{4,5,6},{7,8,9}};
且定义多维数组不必指定每一维的大小,只需指定最左边维度的大小即可。这也就是说,java的二维数组允许是不规则的。
int array3[][]=new int[3][];
int array2[][]= {{1,2,3},{4,5,6,7},{8,9}};
这便是一个不规则的二维数组
在我们知道二维数组的定义方法后,我们则需要知道二维数组的用法。
二维数组的赋值和取值
一维数组的赋值是通过 ArrayName[下标]进行赋值
而二维数组与之相同,ArrayName[下标][下标],需要注意的是,二维数组和一维数组一样,每一维度的下标都是从0开始的!
如下列代码
array[1][2]=0; System.out.println(array[1][2]);这两行代码的意思便是将二维数组array的[1][2]的位置赋值为0并打印出来。
二维数组和一维数组的赋值与取值其实都是一样,只是二维数组需要同时给出第一和第二维度的位置。
既然取值和赋值一样,那么二位数组的遍历是否和一维数组也相差不多呢?
二维数组的遍历
一维数组的遍历是通过for循环,用length取出数组的长度进行遍历。
而二维数组在此基础上多了一个for循环用于遍历对应的第二维数组。
代码如下:
for(int i=0;i<twoarray.length;i++) { //取二维数组的第一维度 for(int j=0;j<twoarray[i].length;j++) { //取二维数组的第二维度,也就是第一维度中数组的长度 System.out.print(twoarray[i][j]); } }
二维数组例题
打印杨辉三角
首先我们先要分析杨辉三角的规律。最显而易见的当然是每一行的首位和末尾都是一。
其次,从第三行开始,每一个非收尾的数等于上一行的自身加上上一行自身前一列的和。
在找到题目的规律后,我们再用程序的思维去查看这个题目,它每一行貌似都是一个数组,那么我们是否可以把它看为一个不规则的二维数组呢?如果用二维数组来解题又会怎样呢?
直接放出解题代码:
public static void yanghui(int h) { //打印杨辉三角 h代表它的行数。 int sz[][]=new int[h][h]; //创建一个二位数组 for(int i=0;i<h;i++) { sz[i][0]=1; sz[i][i]=1; for(int j=1;j<=i;j++) { if(i>=2) {//i从0开始,所以我们的i要大于等于2才取到的是第三行。 sz[i][j]=(sz[i-1][j]+sz[i-1][j-1]); } } } /* * 输出方法一:把非0数字打印出来,如果为0则直接不输出 */ for(int w=0;w<=sz.length-1;w++) { for(int e=0;e<=sz[w].length-1;e++) { if(sz[w][e]!=0) { System.out.print(sz[w][e]+" "); } } System.out.println(); } /* * 输出方法二:直接限制列的打印长度等于行,使其多余的部分不会被打印出来。 */ for(int o=0;o<=sz.length-1;o++) { for(int p=0;p<=o;p++) { System.out.print(sz[o][p]+" "); } System.out.println(); } }
题目总结:本题使用二维数组,首先初始化一个杨辉三角行数的矩阵二维数组出来,然后把每一位的数字放入对应的数组位置中去,最后遍历该数组,控制格式输出即可~
笔记总结
二维数组和多维数组其实都是基于一维数组的,多维数组也和二维数组一样,无非就是往数组中放数组,仅此而已。
发表评论