- package com.itheima;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String[][] heilx = helix2DArray(5);
-
- for(int i=0;i<heilx.length;i++){
- for(int j=0;j<heilx.length;j++){
- System.out.print(heilx[i][j]+" ");
- }
- System.out.println();
- }
- }
-
- //定义一个螺旋二维数组
- public static String[][] helix2DArray(int size){
- //数组的大小就是数字的前后各加1
- int len = size + 2;
- String[][] heilx = new String[len][len];
- //遍历数组
- for(int x=0;x<len;x++){
- for(int y=0;y<len;y++){
- //凡是第一行和最后一行都是*号
- if(x==0||x==len-1){
- heilx[x][y] = "*\t";
- }
- //凡是第一列和最后一列都是*号
- if(y==0||y==len-1){
- heilx[x][y] = "*\t";
- }
- }
- }
- /*
- * * * *
- * 1 2 *
- * 4 3 *
- * * * *
-
- 找规律:如果 size是双数 则从 len/2-1开始,否则 len/2
- 循环size次,分别x和y的变化是: 第一次 y++ 第二次 x++ 第三次 y-- y-- 第四次 x-- x-- 以此类推
- 有点类似于 y: 1 34 789 131415
- x: 2 56 101112
- */
- if(size%2==0){
- heilxNumber(heilx, len/2-1, len/2-1, size);
- }else{
- heilxNumber(heilx, len/2, len/2, size);
- }
- return heilx;
- }
-
- private static void heilxNumber(String[][] heilx,int x,int y,int size){
-
- //定义让y循环多少次
- int a = 1;
- //定义让x循环多少次
- int b = 1;
- //定义一个判断y或x是该++还是该--
- int temp = 1;
- //存入螺旋数值
- int h = 1;
- heilx[x][y] = temp+"";
- while(temp<=size){
- for(int i=0;i<a;i++){
- if(temp%2==0){
- heilx[x][y] = h+"\t";
- h++;
- y--;
-
- }else{
- heilx[x][y] = h+"\t";
- h++;
- y++;
- }
- }
- if(temp<size){
- for(int j=0;j<b;j++){
- if(temp%2==0){
- heilx[x][y] = h+"\t";
- h++;
- x--;
-
- }else{
- heilx[x][y] = h+"\t";
- h++;
- x++;
- }
- }
- }
- a++;
- b++;
- temp++;
- }
- }
- }
复制代码 |