螺旋填数. 读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。 例如读入数字4,5,则输出结果为:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
public class TextDemo2 {
public static void main(String[] args) {
//给定数组---存储数据
int[][] arr=new int[4][5];
//行和列的概念
int row=0;//代表行
int col=0;//代表列
//初始化(0,0)坐标
arr[row][col]=1;
//定义数组表示方向
int[][] diraction={{0,1},//代表往右
{1,0},//代表往下
{0,-1},//代表往左
{-1,0}//代表往上
};
//提供下标控制方向
int diractionIndex=0;
//通过for循环实现循环給值
for(int i=2;i<=4*5;i++){//一次循环要把新的值给新的坐标
//得到新的下标
row=row+diraction[diractionIndex][0];
col=col+diraction[diractionIndex][1];
//判断越界的情况
if((col>=5)||(col<0)||(row>=4)||(row<0)||(arr[row][col]!=0)){
//先得到原来的坐标
row=row-diraction[diractionIndex][0];
col=col-diraction[diractionIndex][1];
//转向
diractionIndex++;
//保证是螺旋
if(diractionIndex==4){
diractionIndex=0;
}
//改变方向之后得到新的坐标
row=row+diraction[diractionIndex][0];
col=col+diraction[diractionIndex][1];
}
//把新的值赋值给新的坐标
arr[row][col]=i;
}
//遍历二维数组
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}