java学习——25.二维数组
如果数组元素又是数组,则称为多维数组,常用的是二维数组。
二维数组可以看成由两个一维数组组成,所以很多东西与一维数组类似,如其声明的方法、可进行的运算等等。
1、声明二维数组
数组类型数组名【】【】;
用[][]表示二维数组。
例:int a[][];
a=newint[4][5];//用new关键申请存储空间
上两行可以合并成一行:
int a=new int[4][5];
2、赋初值
声明时可以赋初值,将值和多层花括号括起来,如:
int a[][]={{1,2,3},{4,5,6}}
3、下标
二维数组常被用在行列式中,每个元素用2个下标表示,如:a[i][j]为第i行第j列。
行、列均从0开始,同样要注意均不能越界。
例:奇数阶幻方
n阶幻方是指将自然数1~n*n排列成n*n阶方阵,其各行、各列及各对角线上的数字之和相等。
连续摆数法(也称暹罗法)适用于构造奇数阶幻方。
其构造规律如下:
(1) 初始位置为第0行中间,放置1.
(2) 向当前位置的右上方顺序放置下一个数;将幻方阵沿行、列方向看成环形。
(3) 若当前位置放置数为n的倍数,即一条对角线已满,则下一个数的位置是本列的下一行。
其完整代码如下:
import java.util.*;
public classhuanfang {
public static void main(String args[]){
Scannersc=newScanner(System.in);
System.out.print("请输入阶数:");
int n=sc.nextInt();
int mat[][]=newint[n][n];//用二维数组mat来存储幻方
int i=0,j=n/2;//i为行,j为列, 初始位置为mat[0][n/2]
for(int k=1;k<=n*n;k++)//计算各行列的值
{
mat[i][j]=k;//放置第一个数
if(k%n==0)//如果对角线已满
i=(i+1)%n;//下一位置下一行
else
{
i=(i-1+n)%n;//向上一行
j=(j+1)%n;//向右一行
}
}
for(int m=0;m<n;m++){//输出二维数组
for(int l=0;l<n;l++)
System.out.print(mat[m][l]+" \t");
System.out.println();
}
}
}
其运行结果如下:
(1) 当n输入3时,输出:
(2) 当n输入5时,输出:
(3) 当n输入7时,输出: