再来一个会转弯的:- package cn.itheima;
- public class DrawTheArr {
- /**写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
- * 本实例成功完成!
- * @author 冰深
- */
- public static void main(String[] args) {
- int div=6;
- int arr[][]=new int[div][div];
- //定义方向right 1,down 2, left 3, up 4
- draw(arr,div);
- printMap(arr,div);
- }
- private static void draw(int[][] arr, int div){
- int dir=1;
- int i=0,j=0;
- for(int t=0;t<div*div;t++){
- //给当前元素赋值
- arr[i][j]=t+1;
- System.out.println("------------\r\n元素值arr["+i+"]["+j+"]="+arr[i][j]+";方向:"+dir);
- //判断下个元素是否可用,如果不可用,那么就转向:元素角标越界或者下一个元素不为空
- boolean out=nextX(dir,j)>=div || nextX(dir,j)<0 || nextY(dir,i)>=div || nextY(dir,i)<0;
- if(out || arr[nextY(dir,i)][nextX(dir,j)]!=0){
-
- if(!out)
- System.out.println("拐弯原因是:arr["+nextX(dir,j)+"]["+nextY(dir,i)+"]"+arr[nextX(dir,j)][nextY(dir,i)]);
- System.out.println("~~~~拐弯,转向了~!"+out);
- dir=nextDir(dir);
- }
-
- //获取下一次的坐标
- j=nextX(dir, j);
- i=nextY(dir, i);
- System.out.print("下一个坐标arr["+i+"]["+j+"]\r\n------------\r\n");
- }
-
- }
-
-
- //获取下一个方向
- private static int nextDir(int dir) {
- switch (dir) {
- case 1:
- dir=2;
- break;
- case 2:
- dir=3;
- break;
- case 3:
- dir=4;
- break;
- case 4:
- dir=1;
- break;
- default:
- break;
- }
- return dir;
- }
- //获取下一个x坐标
- private static int nextX(int dir, int x) {
- switch (dir) {
- case 1:
- x++;
- break;
- case 3:
- x--;
- break;
-
- default:
- break;
- }
- return x;
- }
-
- //获取下一个Y坐标
- private static int nextY(int dir,int y) {
- switch (dir) {
-
- case 2:
- y++;
- break;
-
- case 4:
- y--;
- break;
- default:
- break;
- }
- return y;
- }
- //打印数组
- private static void printMap(int[][] arr, int div) {
- for(int i=0;i<div;i++){
- for(int j=0;j<div;j++){
- System.out.print(arr[i][j]+"\t");
- }
- System.out.println();
- }
- }
- }
复制代码 效果如下:
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
|