求解下面程序为什么不能求出n为基数的情况??基数的时候就会死循环,求求求~~~~~~~~~~~~~
package com.heima.test;
/*写一方法,打印等长的二维数组 写一方法,打印等长的二维数组,
要求从 1 开始的自然数由方阵的最外圈向内螺旋方式地 顺序排列。 如: n = 4 则打印:
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
*/
public class Test8 {
public static void main(String[] args)
{
int[][] arr = drawCir(6);
for(int a=0;a<6;a++)
{
System.out.println();
for(int b=0;b<6;b++)
{
System.out.print(arr[a][b]+"\t");
}
}
}
//每一圈左上角的数字是最小的设为min
//每一圈有(n-1)*4个数字, 圈数设为count
public static int[][] drawCir(int n)
{
int[][] arr = new int[n][n];
int step = 1; //移动的次数
int move = 1;
//表示指针移动的方向 指针其实位置都是左上
/*
* 观察得数字运动路线为:右,下,左,上。所有定义变量来记录上一个数字运动方向。
右:1 下:2 左:3 上:4 .第一步肯定往右,所有move初始值为1.
*/
int start = 0;
int end = n-1;
while(step<((n*n)+1))
{
switch(move)
{
case 1:
{
int a= start;
while(a<end)
arr[start][a++]=step++;
//System.out.print(step);
}
case 2:
{
int a= start;
while(a<end)
arr[a++][end]=step++;
//System.out.print(step);
}
case 3:
{
int a= end;
while(a>start)
arr[end][a--]=step++;
//System.out.print(step);
}
case 4:
{
int a= end;
while(a>start)
arr[a--][start]=step++;
//System.out.print(step);
}
default:
break;
}
start++;
end--;
if(start==end)
arr[start][end]=n*n;
}
return arr;
}
}
结果为
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
|
|