public class test
{
public static void main(String arg[])
{
System.out.println("打印螺旋数组如下: ");
Scanner input = new Scanner(System.in);
int aa = input.nextInt();
int jj = aa;
test ra=new test();
int[][] array=new int[aa][jj];
for(int _row=0;_row<aa;_row++){
for(int _col=0;_col<jj;_col++){
array[_row][_col]=-1;
}
}
ra.printRatateArray(array);
}
public void printRatateArray(int[][] array){
//数组行数,列数
int rows=array.length;
int cols=array[0].length;
//矩形的数量,将一条线也视为上下边重合的矩形
int regCount=rows%2==0?rows/2:(rows+1)/2;
//初始种子数,即最外层矩形的左上角值
int seedNum=1;
for(int i=0;i<regCount;i++){
System.out.println("种子数据:"+seedNum);
//遍历数组,填充数据
for(int _row=0;_row<rows;_row++){
for(int _col=0;_col<cols;_col++){
//矩形上边横线
if(_row==i&&array[_row][_col]==-1){
array[_row][_col]=seedNum+_col-i;
}
//矩形右边竖线
if(_col==(cols-i-1)&&array[_row][_col]==-1){
array[_row][_col]=seedNum+(rows-2*i)+(cols-2*i)-2-(rows-i-1-_row);
}
//矩形下边横线
if(_row==(rows-1-i)&&array[_row][_col]==-1){
array[_row][_col]=seedNum+(rows-2*i)+(cols-2*i)-2+(cols-i-1-_col);
}
//矩形左边竖线
if(_col==i&&array[_row][_col]==-1){
array[_row][_col]=seedNum+(rows-2*i)+(cols-2*i)-2+(cols-i*2)-1+(rows-i-1-_row);
}
}
}
seedNum=(rows-2*i+cols-2*i)*2-4+seedNum;
}
//打印结果
for(int _row=0;_row<rows;_row++){
for(int _col=0;_col<cols;_col++){
System.out.printf("%3d",array[_row][_col]);//用了java5的格式化输出,故该程序要在jdk5下编译
}
System.out.println();
}
}
} |