/*
* 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 19 9 8 7
*
*
*
*
*/
package com.itheima;
public class Test9 {
public static void main(String[] args){
arrayNum(4);
}
//便于改代码..输入不同y值输出不同的二维数列
private static void arrayNum(int y)
{
int[][]arr=new int [y][y];
specArr(arr);
arrPrint(arr);
}
//高级for输出打印用的
private static void arrPrint(int[][] h) {
for(int[] in:h)
{
for(int t:in)
{
System.out.print(t+" \t");
//if(t<10)System.out.print(t+" \t");
//else System.out.print(t+" \t");
}
System.out.println();
}
}
//从0开始 一层一层写进去.. 给二维数组赋值
private static void specArr(int[][]arr) {
int n=arr.length ;
int max=0;//从1开始赋值
int count=0;// 循环的圈数
while (n>0){
int j=0;//指针作用
for(int i=0;i<(n-1)*4;i++)
{
if (i<n-1) arr[0+count][i+count]=++max;
else if (i<2*n-2) arr[count+j++][arr.length-1-count]=++max;//自加后赋值 max++赋值后自加
else if (i<3*n-3) arr[arr.length-1-count][(j--)+count]=++max;
else if (i<4*n-4) arr[arr.length-1-(j++)-count][0+count]=++max;
}
if(n==1){
arr[arr.length/2][arr.length/2]=max+1 ;
}//注意到 当y值为奇数时,会有循环到n=1的情况,需要补进数组最中间值
count++;
n-=2;//n=n-2外圈变内圈时长度少两个值
}
}
}
|
|