/*
输出 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
思路:这是一个5行四列的一个矩阵所以可以用循环来输出
这个矩阵是不规则输出的矩阵所以我想到了用数组来存放,然后打印数组的方法
经过尝试发现6,7,8,9这些竖排没有规律放入对应的数组,
需要一个新的数组更大来给数组这四个数组加顺序;
所以想到了用二维数组的方式做如下排列:
int arr[][] = new int[][];
让一个二维数组包含下面这些数组
0 arr[]1 2 3 4 5
0 1 2 3 4//这是坐标
1 arr[]16 17 18 19 6
arr[n] 2 arr[]15 24 25 20 7
3 arr[]14 23 22 21 8
4 arr[]13 12 11 10 9
0 1 2 3 4
这
是
坐
标
*/
class TestJZ{
public static void main(String[] args) {
int l,w,number=0,n;
n = 7;
int arr[][] = new int[n][n];
for(w=0; w<(n+1)/2; w++){//限定总体的循环次数是(n+1)/2
//给第一个数组赋值
//并在第二次循环时能给下一行进行赋值动作且坐标位不冲突
for(l=w;l<=n-w-1;l++){
arr[w][l] = ++number;
}
//给最后一列赋值,并能在下次的循环中给它的前一列赋值
//并使坐标位置不冲突
for(l=w+1; l<=n-w-1; l++){
arr[l][n-w-1] = ++number;
}
//给最下面的列进行赋值动作,并使他能给下一次它的上面行进行赋值
//并且坐标位置不冲突
for(l=n-w-1-1;l>=w;l--){ //减一是为了坐标位不越界,
//减W是为了第二次循环时候坐标位缩进
arr[n-w-1][l] = ++number;
}
//给最左面一列进行赋值动作,并使他在下一次能给他右面的列进行赋值
//并且坐标位置不冲突
for(l=n-w-1-1;l>w;l--){ //第一个减一是为了坐标不越界,第二个减一是为了不和上一句
//的坐标位冲突
arr[l][w] = ++number;
}
}
for(w=0; w<n; w++){
for(l=0; l<n; l++){
System.out.print(arr[w][l]+"\t");
}
System.out.println();
}
}
}
虽然有点想吐,不过搞出来实在是太兴奋了!分享下吧! |