二维数组是个很有意思的数组,在Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同,在动态初始化的时候,可以指定最高维的行。
int a[][]=new int[5][];
通过一些习题,我们来看看二维数组的一些应用。
多维数组的行和列求平均值
--------------------------------------------
80 75 92
61 65 71
59 63 70
85 87 90
76 77 85
第一个方框表示行,第二个表示列,通过这一道题可以让你清楚二维数组是怎样在运转的。
public void Avg(){
int num[][] = {
{80,75,92}, // 二维数组的初值赋值
{61,65,71},
{59,63,70},
{85,87,90},
{76,77,85}
};
int m=0; int p=0;
//此题的一个关键知识点在于,num.length可以用来表示行数和num[i].length可以用来表示列数,
//求行的平均值,最外层的循环控制行 num.length为5
for(int i=0;i<num.length;i++){
//内层循环控制列,num[i]的长度为3
for(int j=0;j<num[i].length;j++){
m+=num[i][j];
}
m=m/num[i].length;
System.out.println(m+" ");
}
//求列的平均数,所以列数在最外层控制循环
int index=0;
for(int j=0;j<num[index].length;j++){
//内层循环为行循环
for(int i=0;i<num.length;i++){
p+=num[i][j];
}
p=p/num.length;
System.out.print(p+" ");
index++;
}
}
求多维数组对角线之和
--------------------------------------------
4 2 3
4 5 6
7 8 9
这道题有个很有趣的地方值得大家注意,关于对角线我们该怎么求。如果我问你在这九个数里把对角线用笔画连起来,我相信只要是智力正常的人都可以不费吹灰之力就可以马上完成。
但计算机不知道啊,你要告诉它,通过观察你可以发现一个问题,那就是4,5,9的行和列下标都是一样的,也就是00,11,22,所以在循环里加个判断就可以了。但3,5,7的下标就不是一眼可以看得出来,它们的下标分别为02,11,00,从这三个下标可以看出J这个数递增的很有规律,而i 出来的数列是010,那如果只是单纯的输出这样的数列,用2来减一个递增数就好了。
以下我用了两种方式来实现,只是角度不同罢了。
public void diagonal(){
int s=0;
int p=0;
int num[][] = {
{4,2,3}, // 二维数组的初值赋值
{4,5,6},
{7,8,9}};
//此循环遍历最外层,行
for(int i=0;i<num.length;i++){
for(int j=0;j<num[i].length;j++){
if(i==j){
s+=num[i][j]+num[2-i][j];
}
System.out.print(num[i][j]+" ");
}
System.out.println(s);
}
//从右下角到左上角,反向对角线
for(int i=num.length-1;i>=0;i--){
for(int j=num[i].length-1;j>=0;j--){
if(i==j){
p+=num[i][j]+num[2-i][j];
}
System.out.print(num[i][j]+" ");
}
System.out.println("p:"+p);
}
}
求多维数组中的每一行及每一列及全部最大数
--------------------------------------------
16 24 77 32 41
69 45 83 12 89
37 66 18 35 56
22 33 44 55 66
19 28 37 46 55
这一道题如果只是单纯让大家求行的最大数,我相信很快就能出来,关键在于列
其实二维数组有趣也就有趣在这个地方,通过控制行与列的循环的一个交换,就可以很容易的现实。
public void Max(){
int num[][] = {
{16,24,77,32,41}, // 二维数组的初值赋值
{69,45,83,12,89},
{37,66,18,35,56},
{22,33,44,55,66},
{19,28,37,46,55}};
//求行的最大数
for(int i=0;i<num.length;i++){
int s=0;
for(int j=0;j<num[i].length;j++){
if(num[i][j]>s){
s=num[i][j];
}
System.out.print(num[i][j]+" ");
}
System.out.println("最大值:"+s);
}
System.out.println();
//int j=0;j<num[j].length;j++如果这样写,那么到第5次循环的时候,那num[j]的下标会越界,所以需要在循环体内加判断,在j=4的时候,跳出去。
for(int j=0;j<num[j].length;j++){
int s=0;
for(int i=0;i<num.length;i++){
if(num[i][j]>s){
s=num[i][j];
}
System.out.print(num[i][j]+" ");
}
System.out.println("最大值:"+s);
if(j==num[j].length-1){
break;
}
}
}
输出《杨辉三解形》....
-----------------------
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1
5 10 10 5 1
关于杨辉三角形,这也算是一个经典的题目了
1.第一步先把一个三解形打出来。
2.把腰的部分打成1,通过观察,1往往出现在当下标为0或者上限值的时候。
3.下一行的一个数,往往是上一行正上方和左边的一个数,用红字标明,可以看得更清楚一些。
public void YangHui(int len){
int [][]num=new int[len][len];
//行不变
for(int i=0;i<num.length;i++){
//列在递增,因为j的值是控制列的,故应该对J
for(int j=0;j<i;j++){
if(i==0||j==0||j==i){
num[i][j]=1;
}else{
num[i][j]=num[i-1][j]+num[i-1][j-1];
}
System.out.print(num[i][j]+" ");
}
System.out.println();
}
}
分享到:
相关推荐
用C++语音实现一维数组二维数组写入txt,从txt中读取数据存到一维数组、二维数组,数组用指针表示
// 二维数组冒泡排序 public static void main(String[] args) { int i=0, j=0, temp = 0; int[][] nums1 = { { 34, 1, 22, 5 }, { 28, 98, 15, 32 }, { 33, -5, 17, 41 } }; int rows = nums1.length; //二维...
一维数组转二维数组
C# json 一维数组 和 二维数组的转换 写的非常详细,对大家有帮助
VB.NET二维数组快速排序(更新) 'OldArrays(),为排序二维数组;NewArrays(),为存放结果数组,SortColumnsOrOrders(),传递排序参数数组,偶数个为排序列号,奇数为升降序,0为升序,1为降序;FieldRow,是否有字段行...
实现一个“可变长二维数组”,这个二维数组的行数可由输入决定,每行的元素个数仍可由输入决定。每个数组元素值都是1. 执行结果如下: 请输入行数: 5 请输入第1行的元素个数: 20 请输入第2行的元素个数: 34 请...
CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组CStringArray二维数组
用二维数组实现二维矩阵的加法和乘法 #include #define SIZE 4 void addMatrix(int [ ][SIZE], int [ ][SIZE], int [ ][SIZE]); void mulMatrix(int [ ][SIZE], int [ ][SIZE], int [ ][SIZE]); void ...
将labview内二维数组方便的转化为一维数组使用
通过vue解析表头合并的表格,后台返回的数据格式为[{name:aa,list:[{value:100}]}] 通过table与v-for组合循环数据达到目的。 vue 表头合并数据解析 vue 二维数组解析 vue 二维list解析 vue table+v-for
介绍了数组、一维数组、二维数组、多维数组及其应用示例
有下面这样的一个二维表,请将其使用二维数组输出 姓名 语文 数学 英语 张三 80 70 90 李四 40 50 90 王五 90 98 100 题解 与几位童鞋交流了一下发现他们都把汉字单独拿出来了,只用数组存储的成绩,...
用 for 循环产生 4 行 100 列二维数组,数组成员如下: 1,2,3………100 100,99,98………..1 6,7,8………….105 105,104,103………6 从这个数组中提取出 2 行 50 列的二维数组,成员如下: 50,49,48……...
二维数组的声明和使用ppt介绍很快可以上手练习和理解用的
C语言程序设计-求出二维数组周边元素之和,作为函数值返回;二维数组的值在主函数中赋予;
labview 删除二维数组全空行
C++关于信息学竞赛 二维数组23个源文件试题 供初学者练习 #include using namespace std; main() { int a[6][6],max,max_y,min,min_x; for(int i=1;i;i++) for(int j=1;j;j++) cin>>a[i][j]; for(int i...
使用Excel两个一维数组构造二维数组.rar,本例所示的Sheet1工作表已经定义了两个一维数组,利用公式对这连个数组进行加法运算,可以生成一个新的二维数组。
c#调用c++DLL,DLL里是二维数组 ,c#里如何调用二维数组
二维数组基本操作的编程实现 要求: 二维数组基本操作的编程实现(2学时,验证型),掌握数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。也鼓励...