随着编程的学习和工作,感触越来越深的,就是如何做好对需求的理解。那么在学习的过程中,就是如何将一个实际问题,转化成计算机语言去实现。我觉得我的这方面的能力很是欠缺啊。
今天分享一下一个螺旋数组例子的分析:
贴上code:
package excesize; /* * 螺旋数组: * 4 * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 */ public class LuoxuanArray { public static void main(String[] args){ int len=4; int[][] arr=luoxuanStart(len); for(int i=0;i<len;i++){ for(int j=0;j<len;j++) { System.out.print(+arr[i][j]+"\t"); } System.out.println(); } } public static int[][] luoxuanStart(int len){ /* * 定义一个整形方向变量,默认值为:0 * 0:向右;1:向下;2:向左;3:向上 */ final int toRight=0;//为什么要定义成final类型 final int toDown=1; final int toLeft=2; final int toUp=3; int currentDirection=toRight; //定义一个二维数组,用于存放二维的螺旋数组值 int x=0,y=0;//定义二维数组的下标 int[][] luoxuan=new int[len][len]; for(int i=1;i<=len*len;i++){//----------------------------------for //给当前坐标赋值 luoxuan[x][y]=i; //计算下一个正确坐标-这个坐标不一定正确,所以先将此坐标的位置 int tempX = x; int tempY = y; //根据当前的方向确定下一个位置的坐标--------switch switch (currentDirection){ case toRight:{ tempY++; break; } case toDown:{ tempX++; break; } case toLeft:{ tempY--; break; } case toUp:{ tempX--; break; } }//-----------------------------switch //2.2、下一个坐标如果正确,就赋值。否则,就转向,并赋值。 /* * 坐标值在正确的范围,并且该坐标未被赋过值,才是正确的坐标值 */ if(tempX>=0 && tempX<len && tempY>=0 && tempY<len && luoxuan[tempX][tempY]==0){ //如果是正确的坐标,将临时坐标赋给实际坐标 x=tempX; y=tempY; }else{ //开始转向 下一个方向 = (curDir+1)%4 currentDirection=(currentDirection+1)%4;//四个方向 switch (currentDirection){ case toRight:{ y++; break; } case toDown:{ x++; break; } case toLeft:{ y--; break; } case toUp:{ x--; break; } }//-------------------switch }//-----------------------------------if }//------------------------------------------------------for return luoxuan; }//-----------------------------------------------------------------------luoxuanStart }
Java 螺旋数组的实现方式-一个循环实现哦,布布扣,bubuko.com
原文:http://blog.csdn.net/hymking/article/details/25507067