* 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
* 如: n = 4 则打印:
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
public class Test7 {
public static void main(String[] args) {
int n = 4;
System.out.print("n = ");
Scanner sc = new Scanner(System.in);
n = sc.nextInt(); //读取方阵大小
int[][] arr;
arr = printCircle(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.printf("%-5d", arr[i][j]);
}
System.out.println();
}
}
private static int[][] printCircle(int N) {
int i,j,k,l,m,n;
int[][] num = new int[N][N];
int var = 1; //填充的数字,每填充一次自增一次
//方阵按口字形顺时针填充数据,循环(N+1)/2次
for(i=0,n=N-1; i<(N+1)/2; i++,n--){
//填充顶部
for(j=i; j<=n; j++) { //横坐标不变,纵坐标递增
num[i][j] = var++;
}
//填充右边
for(k=i; k<n; k++) { //纵坐标不变,横坐标递增
num[k+1][n] = var++;
}
//填充底部
for(m=n-1; m>=i; m--) { //横坐标不变,纵坐标递减
num[n][m] = var++;
}
//填充左边
for(l=n-1; l>i; l--) { //纵坐标不变,横坐标递减
num[l][i] = var++;
}
}
return num;
}
}
|
|