该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
矩阵形式如下:
1 3 4 10 11 21 22
2 5 9 12 20 23 34
6 8 13 19 24 33 35
7 14 18 25 32 36 43
15 17 26 31 37 42 44
16 27 30 38 41 45 48
28 29 39 40 46 47 49
public class Test6_3 {
public static void main(String[] args) {
int n = 7;
int move;//当前数字的移动方向
int[][] data = new int[n][n];
final int Down = 0;//下
final int UpRight = 1;//右上
final int Banon = 2;//右
final int Right = 3;//左下
move = Down;//初始移动方向
int value = 1;//数组元素的值
int row = 0;//第一维的下标
int col = 0;//第二维的下标
data[0][0] = 1;//初始化第一个元素
for(int i=1; i<=n*n; i++) {
switch(move) {
case Down:
row++;//移动到下一行
if(col == 0) {//在第一列移动时
move = UpRight;
continue;//跳过该次循环
}else if(col==n-1) {//在最后一列移动时
move = Banon;
continue;//跳过该次循环
}
break;
case UpRight:
row--;//移动到上一行
col++;//移动到后一列
if(col==n-1) {//超过边界
//row++;//后退
//col--;//后退
move = Down;
continue;//跳过该次循环
}else if(row==0) {//超过边界
//row++;//后退
//col--;//后退
move = Right;
continue;//跳过该次循环
}
break;
case Banon:
row++;//移动到上一行
col--;//移动到下一列
if(row==n-1) {//超过边界
//row--;//后退
//col++;//后退
move = Right;
continue;
}else if(col==0) {//超过边界
//row--;//后退
//col++;//后退
move = Down;//跳过该次循环
continue;
}
break;
case Right:
col++;//移动到下一列
if(row==0) {//在第一行移动时
move = Banon;
continue;
}else if(col==n-1) {//在最后一列移动式
move = UpRight;
continue;//跳过该次循环
}
break;//跳过该次循环
}
value++;//数值增加1
data[row][col] = value;//赋值
}
//输出数组中的元素
for(int i=0; i
for(int j=0; j
if(value<10) {//右对齐
System.out.print(' ');
}
System.out.print(data[i][j]);
System.out.print(' ');
}
System.out.println();
}
}
}
编译没问题,但是一运行就在“data[row][col] = value;//赋值”这一行 出现Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7。
求好人帮忙调试下,万分感谢!!