熬了一下午,今天天气算是入冬以来最好的一天了!呼~,但是,但还是先来看看螺旋形数组吧。
QUESTION DESCRIBE
从START位置开始,数组中的数值随着紫色的线条的移动方向每经过一格就自增1(只要移动方向上的数值后一个比前一个大就行,不唯一),一直到五角星的位置结束,数据存储在二维数组当中,这就构成了像螺旋一样的数组。
One of Solutions:
(1) SpiralArray类
public class SpiralArray {
/**
* 像图片上显示的那样,可以自定义二维数组的长度,
* 最终输出一个指定长度的螺旋状数组
*/
private static Scanner scan = new Scanner(System.in);
private static int row; //记录输入的行值
private static int column; //记录输入的列值
public static void main(String[] args) {
PrintSpiralArray psa = new PrintSpiralArray();
System.out.print("请输入二维数组的长度(行值 列值):");
row = scan.nextInt();
column = scan.nextInt();
int[][] spiralArray = psa.CreateSpiralArray(row, column);
for (int i = 0; i < spiralArray.length; i++) {
for (int j = 0; j < spiralArray[i].length; j++) {
System.out.print(spiralArray[i][j] + " ");
}
System.out.println();
}
}
}
(2) PrintSpiralArray类
public class PrintSpiralArray {
//price用于初始化row和column确定的存储空间的数值
private int price = 1314 ;
private enum Direction{TOP,RIGHT,BOTTOM,LEFT};
private Direction direct = Direction.RIGHT;
private int ROW = 0;
private int COLUMN = 0;
public int[][] CreateSpiralArray(int rows, int columns) {
int[][] spiArray = new int[rows][columns];
int totalPrice = rows*columns + price - 1;
for (;price <= totalPrice;++price ) {
spiArray[ROW][COLUMN] = price;
if (price == totalPrice) //已经是最后一个值时结束循环
break;
Repositioning(spiArray,ROW,COLUMN,direct);
}
return spiArray;
}
private void Repositioning
(int[][] SpiArray, int Row, int Column, Direction dir)
{
switch(dir) {
case RIGHT:
if (Column + 1 < SpiArray[Row].length
&& SpiArray[Row][Column + 1] == 0) {
this.COLUMN++;
this.direct = dir;
return;
}
else Repositioning(SpiArray, Row, Column, Direction.BOTTOM);
break;
case BOTTOM:
if (Row + 1 < SpiArray.length
&& SpiArray[Row + 1][Column] == 0) {
this.ROW++;
this.direct = dir;
return;
}
else Repositioning(SpiArray, Row, Column, Direction.LEFT);
break;
case LEFT:
if (Column - 1 >= 0 &&
SpiArray[Row][Column - 1] == 0) {
this.COLUMN--;
this.direct = dir;
return;
}
else Repositioning(SpiArray, Row, Column, Direction.TOP);
break;
case TOP:
if (Row - 1 >= 0
&& SpiArray[Row - 1][Column] == 0) {
this.ROW--;
this.direct = dir;
return;
}
else Repositioning(SpiArray, Row, Column, Direction.RIGHT);
break;
}
}
}
“Nothing is impossible,the word itself says ’ I’m possible ! ‘”