final int LEFT = 2; //左
final int RIGHT = 3; //右
dire = RIGHT;
int value = 1; //数组元素的值
int row = 0; //第一维下标
int col = 0; //第二维下标
data[0][0] = 1; //初始化第一个元素
while(value < n * m){
switch(dire){
case UP:
row--; //移动到上一行
if(row < 0){ //超过边界
row++; //后退
dire = RIGHT;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
row++; //后退
dire = RIGHT;
continue; //跳过该次循环
}
break;
case DOWN:
row++; //移动到下一行
if(row >= n){ //超过边界
row--; //后退
dire = LEFT;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
row--; //后退
dire = LEFT;
continue; //跳过该次循环
}
break;
case LEFT:
col--; //移动到前一列
if(col < 0){ //超过边界
col++; //后退
dire = UP;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
col++; //后退
dire = UP;
continue; //跳过该次循环
}
break;
case RIGHT:
col++; //移动到后一行
if(col >= m){ //超过边界
col--; //后退
dire = DOWN;
continue; //跳过该次循环
}else if(data[row][col] != 0){//已赋值
col--; //后退
dire = DOWN;
continue; //跳过该次循环
}
break;
}
value++; //数值增加1
data[row][col] = value;//赋值
}
//输出数组中的元素
for(int i = 0;i < data.length;i++){
for(int j = 0;j < data[i].length;j++){
if(data[i][j] < 10){//右对齐
System.out.print(' ');
}
System.out.print(data[i][j]);
System.out.print(' ');
}
System.out.println();
}
在该代码中dire
代表当前元素的移动方向,每个根据该变量的值实现移动,如果移动时超出边界或移动到的位置已赋值,则改变方向,并跳过本次循环,如果移动成功,则数值增加1,对数组元素进行赋值。对于多维数组来说,更多的是设计数组的结构,并根据逻辑的需要变换数组的下标,实现对于多维数组元素的操作。