- /*
- * 写一方法,打印等长的二维数组,
- * 要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
- * 如: n = 4 则打印:
- * 1 2 3 4
- * 12 13 14 5
- * 11 16 15 6
- * 10 9 8 7
- */
- import java.util.Scanner;
- public class Test9 {
- public static void main(String[] args) {
- Scanner sc=new Scanner(System.in);
- System.out.println("请输入一个正整数:");
- int n=sc.nextInt();
- int[][] arr=new int[n][n];
- //每一圈左上角数字最小
- int min=1;
- //圈数
- int count=0;
- print(n,arr,min,count);
- //遍历打印二维数组
- for(int[] ar : arr){
- for(int a : ar){
- if(a<10)
- System.out.print(" "+a+" ");
- else
- System.out.print(a+" ");
- }
- System.out.println();
- }
- /*for(int i=0;i<n;i++){
- System.out.println(Arrays.toString(arr[i])+"\t");
- }*/
- }
- public static void print(int n,int[][] arr,int min,int count){
- for (int i = 0; i <=(n-1)*4; i++) {
- if (n==0) {//当输入0时直接跳出循环
- System.out.println("您的输入有误");
- }else{
- if (n==1) {//当输入1时,打印1
- arr[count][count]=min;
- break;
- }
- }
- //n-1个为一组,一共赋值4组
- if(i<n-1){//第一组,向右赋值
- arr[count][count+i%(n-1)] = min++;
- } else if (i<(n-1)*2){//第二组,向下赋值
- arr[count+i%(n-1)][count+n-1] = min++;
- } else if (i<(n-1)*3) {//第三组,向左赋值
- arr[count+n-1][count+n-1-i%(n-1)] = min++;
- } else if (i<(n-1)*4){//第四组,向上赋值
- arr[count+n-1-i%(n-1)][count] = min++;
- } else {
- //当一圈赋值完毕,圈数加一,边长减二,递归调用
- print(n-2,arr,min,++count);
- }
- }
-
- }
- }
复制代码 |
|