黑马程序员技术交流社区
标题:
螺旋打印矩形
[打印本页]
作者:
13556793092
时间:
2015-9-15 12:33
标题:
螺旋打印矩形
螺旋打印矩形,需求,4个while循环解决,曾经看到过,麻烦上下代码 大神
作者:
枕草虫
时间:
2015-9-15 15:04
因为是n*n的二维数组,所以将其看作是行列式,利用坐标赋值
观察打印的结果可以看出,每一圈的个数是(n-1)*4,上下左右每一行的个数是n-1,然后赋值完之后行坐标和列坐标a,b会回到起始点,所以每次进入内圈的时候都定义了起始点,因此在第一次赋值的时候接受的坐标参数是-1和-1
public static void show(int num){
//定义二维数组
int[][] arr = new int[num][num];
//定义坐标
int a = -1 , b = -1;
//定义count
int count = 1;
//定义外圈的一行或者一列的个数
int n = arr.length;
fuZhi(arr,a,b,count,n);
printArray(arr);
}
private static void fuZhi(int[][] arr, int a, int b, int count, int n) {
// TODO Auto-generated method stub
//每次调用都把坐标指向圈的左上角
a += 1;
b += 1;
//定义k记录住每一圈的个数
int k = 1;
//为上面赋值
while(k<= (n-1)*1){
arr[a][b++] = count;
count++;
k++;
}
//为右边赋值
while(k<=(n-1)*2){
arr[a++][b] = count;
count++;
k++;
}
//为底面赋值
while(k <= (n-1)*3){
arr[a][b--] = count;
count++;
k++;
}
//为左边赋值
while(k <= (n-1)*4){
arr[a--][b] = count;
count++;
k++;
}
//进入内圈行或者列要-2
n -=2;
//当进入最内圈时偶数个n会等于0,奇数个 n会等于1
if(n==0)
return;
if(n==1){
arr[a+1][b+1] = count;
return;
}
fuZhi(arr,a,b,count,n);
}
//打印二维数组
private static void printArray(int[][] arr) {
// TODO Auto-generated method stub
for(int[] ar : arr){
for(int a : ar)
System.out.print(a+"\t");
System.out.println();
System.out.println();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2