一道入学测试题,写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 5则打印: 1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
实在想不出来怎么做,看看别人的代码,有一个地方不懂。不懂的地方在代码注释上,希望各位大师给解答一下
- 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){ <font color="#ff0000">//当n=8时,数组是arr[5-1-0][3+0]??????实际应该是arr[3][4]啊,对于8这个临界值,就应该在这个if语句中啊?????</font>
复制代码
|
|