本帖最后由 杨兴庭 于 2013-7-29 17:48 编辑
- public class Test9 {
- public static void main(String[] args) {
- arraynum(4);
- }
- //便于改代码..输入不同y值输出不同的二维数列
- private static void arraynum(int y) {
- int[][] arr=new int[y][y]; //创建一个二维数组,长度为y
- int size=arr.length;//获得数组长度
- int max=0; //初始化最大值
- int count=0; //计数器
- specArr(arr,size,max,count);
- arrprint(arr);
- }
- //增强for输出打印用的
- private static void arrprint(int[][] arr) {
- for(int[] in:arr) {
- for(int t:in) {
- if(t<10)
- System.out.print(" "+t+" ");
- else
- System.out.print(t+" ");
- }
- System.out.println();
- }
- }
- //利用递归,一层一层写进去..
- private static void specArr(int[][] arr,int size,int max,int count) {
- if(size>0) { //如果长度大于0
- int j=0;
- for(int i=0;i<(size-1)*4;i++) {//??
- if (i<size-1) //??
- arr[0+count][i+count]=++max; //??
- else if (i<2*size-2) //??
- arr[count+j++][arr.length-1-count]=++max; //??
- else if (i<3*size-3)//??
- arr[arr.length-1-count][(j--)+count]=++max; //??
- else if (i<4*size-4) //??
- arr[arr.length-1-(j++)-count][0+count]=++max; //??
- }
- if(size==1) {
- arr[arr.length/2][arr.length/2]=max+1 ;//注意到 当y值为奇数时,会有循环到n=1的情况,需要补进数组最中间值
- }
- count++; //计数器叠加
- size-=2; //每次调用长度都减2
- specArr(arr,size,max,count); //自己调用自己,实现递归
- }
- }
- }
复制代码 网上找的代码,打问号的实在不知道什么意思,脑细胞都死光了。。。。。。。。。。求大神 |