前情提要
众所周知,数组,尤其是二维数组的索引是个令人着迷的小家伙,它经常把人迷的晕头转向,为了不再当史上无敌大迷糊,今天势必把索引与数组长度搞清楚。
索引 从0开始 (一定一定要记住是从0开始)
数组长度 正常数数,从一开始计数(应该没有哪个迷糊虫说自己吃了0个苹果吧Σ( ° △ °|||)︴ )
检测数组长度可以用Java中的length方法
int arr[]=new int [5];
这里的5就指的是数组长度。
例题
下面来几道我这个小白写了2个半小时写出来的题(实在是一言难尽……bug的生产者在此)
利用随机函数产生16个随机数,给一个4*4的二维数组赋值
按行列输出数组
求最外一圈元素之和
求主对角线中最大元素的值及其位置
利用随机函数产生16个随机数,给一个4*4的二维数组赋值
// 1.利用随机函数产生16个随机数,给一个4*4的二维数组赋值
int array[][]=new int[4][4];
// 已知array.length=4
Random r=new Random();
for (int i=0;i<array.length;i++){
for (int j=0;j<array[i].length;j++){
int num = r.nextInt(100);
array[i][j]=num;
}
}
1.这里已知数组长度,所以行和列可以都写上去
2.利用随机数随机产生数的特性,将数值范围设定到0~100,也就是
int num =r.nextInt(100);
3.利用循环,给每一个数组元素赋值
4.把二维数组看成是一个特殊的一维数组,array[i].length的含义也就显而易见了,它表示的是array数组第i行共有几列,也就是第i行共有多少个元素(是数组长度哦)
按行列输出数组
// 2.按行列输出数组
for (int i=0;i<array.length;i++){
for (int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+"\t");
}
System.out.println();
}
这一步只需要双层for循环逐行输出即可,内层for循环结束代表一行输出完毕,需要在外层for循环执行换行操作。
\t 就相当于键盘上的Tab制表键,简洁美观 (u‿ฺu✿ฺ)
求最外一圈元素之和
初步设想
这个就上升难度了,首先来分析一下,一个一个元素加肯定是可以的,毕竟元素少嘛,就16个,抛去中间4个,简简单单呐~
但是,写代码不仅仅是为了解决眼下的问题,更是要体现出代码的特点——复用性。
所以挨个相加不是很好的样子……不行,咱换一个嘛。
我一开始是动了让所有元素相加到最后减去不需要元素的心思,毕竟减4个比加一整个外圈简单,考虑到复用性,我放弃了……
不就是外圈相加嘛,who怕who!!!
再步设想
外圈相加,也就是找到所有外圈元素所在位置的规律,这样问题就轻而易举解决了!
我为了找规律,还专门为此创作了一张惊天地泣鬼神的神作,如图所示……
呐,就是它,根据这张图,可以发现它的行和列都是有规律的在变化,我只需要写四个for循环把两行两列的所有数据加上就大功告成了!
所以我写出了漏洞百出的代码 (⊙﹏⊙)
以下代码块中行注释是解释说明步骤,块注释全是错代码,经过我仔细研究,仔细拿计算器相加(无意间暴露了什么),终于……发现问题出在哪了!
// 3.求最外一圈元素之和
// 3.1 求第一行的和 i不变 j变
int sum=0;
// array.length--4
// array[0].length-1--3
for