前面说到了s型的蛇形举证,接下来分享一下回旋的蛇形举证的Java代码的实现过程:
我们需要的目标输出是这个样子的:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
按照这个数字增加的路线分析,可以简单的理解为这是数字在围绕着一个变化边长的四边形做一个回旋的过程,那么就需要将四个边的边长,使用变量的关系表示出来就可以了!!所以我在写的过程中将他的四个方向分开了写了!!
//那么我们先分析向右走的这一条边:可以表示为
int num=1;
for(int a=0;a<arr.length;a++){arr[0][a]=num++;}
//在看像下的一边,是不是就可以表示为
for(int b=0;b<arr.length;b++){arr[b][3]=num++;}
//那么其他的两个边就同样可以这样表示出来了!
for(int c=arr.length-1;c>=0;c--){arr[3][c]=num++;}
for(int d=arr.length-1;d>=1;d--){arr[d][1]=num++;}
/**现在表示出来了最外面的四个边,接下来就要将里面的边长给表示出来,让
里面的一圈样使用上面的套路,这样一圈一圈的表示,就能将最后的举证表
示出来了!是不是需要一个for循环表示需要绕的圈????看看上面那个完
整的举证,我们数一数他需要的圈数,没错他需要2圈,但是如果是一个3*3的矩阵的话,就同样需要两圈,那么假设他同样需要(矩阵大小)/2+1,这个就是理想的圈数,接下来会考虑到圈数里面的动态关系,表示方法如下,读者可以根据里面的那个for循环分析,这样一来是不是四个边一点点缩小的就都出来了!!!*/
arr = new int[n][n];
int num=1;
for(int x=0;x<n/2+1;x++){
//right
for(int a=x;a<n-x;a++){
arr[x][a]=num++;
}
}
下面就是我写的程序的源代码啦!!!
package practices;
public class SnackArray1 {
static int arr[][] = null;
public static void main(String [] args){
getSnake(4);
printSnake();
}
//获取蛇形矩阵
public static void getSnake(int n){
arr = new int[n][n];
int num=1;
/*在确定边长的变量的是后,确认一下我们需要的目的值和数组 长度的关系,和我们循环圈数的关系,里面四个边就可以写出来了!!*/
for(int x=0;x<n/2+1;x++){
//right
for(int a=x;a<n-x;a++){
arr[x][a]=num++;
}
//down
for(int a=x+1;a<n-x;a++){
arr[a][n-x-1]=num++;
}
//left
for(int a=n-x-2;a>=x;a--){
arr[n-x-1][a]=num++;
}
//up
for(int a=n-x-2;a>x;a--){
arr[a][x]=num++;
}
}
}
//用来将存好的矩阵打印出来
public static void printSnake(){
for(int a=0;a<arr.length;a++){
for(int b=0;b<arr.length;b++){
System.out.print(arr[a][b]+" ");
}
System.out.println();
}
}
}