<分区>
Possible Duplicate:
Looping in a spiral
我正在创建一个程序来填充 3 x 3 矩阵。我想得到这样的结果
5 4 3
6 1 2
7 8 9
正如您可能已经注意到的那样,它是一个螺旋形的。 现在我使用的算法是这样的:我有一个二维数组,其中的值代表数字的坐标。首先,我指定该数组中的每个数字坐标的值为 10。然后从 9 开始,我减小 x 坐标并将坐标的值分配给 currentnum - 1,直到它到达末尾或它的值不是 10;然后我做同样的事情,只是我增加了 Y 的值;然后减小x的值;然后是 Y;
我为每个数字分配 10 的原因就像它充当我的程序的道路。由于当前 num 永远不会超过 9。如果正方形的值为 10,则它就像绿灯。如果它不是 10,则表示已为该方 block 分配了一个值,它会脱离它。
这是我的代码,请注意它是用 Java 编写的
public class spiral {
/**
* @param args
*/
public static void main(String[] args) {
int spiral [] [] = new int[3][3];
for(int i = 0; i <= 2; i++){
for(int j = 0; j <= 2; j++){
spiral[i][j] = 10;
}
}
//0 is x value, 1 is y value
spiral[0][0] = 9;
int x = 1;
int y = 1;
int counter = 1;
int currentnum = 9;
int gridsquare = 3;
for(int i = 0; i <= 8; i++){
if(counter == 5){
counter = 1;
}
if(counter == 1){
System.out.println(x + " " + y);
for(int j = 0;j <= 1;j++){
if(spiral[x][y] == 10){
spiral[x][y] = currentnum;
currentnum--;
x += 1;
}
else{
y += 1;
break;
}
}
}
if(counter == 2){
for(int k = 0; k <= 0; k++){
System.out.print(x + " " + y);
if(spiral[x][y] == 10){
spiral[x][y] = currentnum;
currentnum--;
y += 1;
}
else{
x -= 1;
break;
}
}
}
if(counter == 3){
for(int z = 0; z <= 0; z++){
if(spiral[x][y] == 10){
spiral[x][y] = currentnum;
currentnum--;
x -= 1;
}
else{
y -= 1;
break;
}
}
}
if(counter == 4){
for(int b = 0; b <= 0; b++){
if(spiral[x][y] == 10){
spiral[x][y] = currentnum;
currentnum--;
y -= 1;
}
else{
x += 1;
break;
}
}
}
counter++;
}
System.out.print(currentnum);
}
}
我遇到了这个错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at spiral.main(spiral.java:44)
由于我是 Java 的新手,请有人为此提出一个可能的修复建议。另外,如果您发现我的算法有任何问题,请通知我。