好吧,没怎么在论坛发过贴,格式怎么又错了,代码少了,完整代码
- public class java {
- public static void main(String[] args) {
- //调用打印从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列的二维数组方法
- arrPrint(5);
- }
- //打印从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列的二维数组
- public static void arrPrint(int num){
- //定义定长二维数组
- int[][] arr = new int[num][num];
- int n = arr.length;
- int count = 0;
- int max = 0;
- //递归为二维数组赋值
- rec2DArr(arr,n,count,max);
- //打印
- print2DArr(arr);
- }
- public static void rec2DArr(int[][] arr,int n,int count,int max){
- //递归控制条件
- if(n>0){
- //纵坐标控制值
- int k = 0;
- //(n-1)*4代表每一圈的数值范围
- for(int i=0;i<(n-1)*4;i++){
- //在上边赋值
- if(i<n-1){
- arr[count+0][count+i] = ++max;
- }
- //向右边赋值
- else if(i<2*n-2){
- arr[count+k++][arr.length-1-count]=++max;
- }
- //在下边赋值
- else if(i<3*n-3){
- arr[arr.length-1-count][(k--)+count]=++max;
- }
- //向左边赋值
- else if(i<4*n-4){
- arr[arr.length-1-(k++)-count][0+count]=++max;
- }
- }
- //当n为奇数时,存在n=1的情况,最里圈只有一个数
- if(n==1){
- arr[arr.length/2][arr.length/2]=max+1;
- }
- //增加圈数
- count++;
- //边界每次减少两个数值
- n -= 2;
- //递归
- rec2DArr(arr,n,count,max);
- }
- }
- //打印二维数组
- public static void print2DArr(int[][] arr){
- //二维数组需要双重循环打印
- for(int[] ar : arr){
- for(int a : ar){
- if(a<10)
- System.out.print(" "+a+" ");
- else
- System.out.print(a+" ");
- }
- System.out.println();
- }
- }
- }
复制代码
想问的问题是,当i为8时,数组是arr[5-1-0][3+0]??????实际应该是arr[3][4]啊,对于8这个临界值,就应该在这个if语句中啊?????
|