/**
* 需求:写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的
* 最外圈向内螺旋方式地顺序排列。
* @author Administrator
*分析:用两层for循坏控制赋值,第一个for循环控制循环赋值的圈数i=(n+1)/2,
*在用内层的四个for循环(从0到(n-2*i-1)分别控制上下左右的数组赋值。
*代码实现如下:
*/
public class Test8 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个整数:");
int n=scanner.nextInt();
//创建二维数组容器
int [][]b=new int [n][n];
int num=1;
//控制循环的赋值的圈数
for(int i=0;i<(n+1)/2;i++){
//输入的值为偶数
if(n%2==0){
//控制上边从左到右的一行
for(int j=0;j<n-2*i-1;j++){
b[i][j+i]=num;
num++;
}
//控制左边从上到下的一列
for(int k=0;k<n-2*i-1;k++){
b[k+i][n-i-1]=num;
num++;
}
//控制下边从右到左的一行
for(int l=0;l<n-2*i-1;l++){
b[n-i-1][n-l-1-i]=num;
num++;
}
//控制右边从下到上的一列
for(int m=0;m<n-2*i-1;m++){
b[n-m-1-i][i]=num;
num++;
}
}else { //输入的值为奇数
//当只有一个数的时候特殊赋值
if(num==n*n){
b[n/2][n/2]=n*n;
}
for(int j=0;j<n-2*i-1;j++){
b[i][j+i]=num;
num++;
}
for(int k=0;k<n-2*i-1;k++){
b[k+i][n-i-1]=num;
num++;
}
for(int l=0;l<n-2*i-1;l++){
b[n-i-1][n-l-1-i]=num;
num++;
}
for(int m=0;m<n-2*i-1;m++){
b[n-m-1-i][i]=num;
num++;
}
}
}
//循环输出二维数组
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(b[i][j]+"\t");
}
System.out.println("");
}
}
} |
|