本帖最后由 彭鸿儒 于 2016-8-19 11:24 编辑
主要还是要有一个方向的概念,将二维数组看做一个回型走廊,碰到墙就右转直到走到尽头就行了
[AppleScript] 纯文本查看 复制代码 public class Test {
public static void main(String[] args) {
System.out.println("请输入圈数:");
Scanner sc = new Scanner(System.in);
int quan = sc.nextInt();
int[][] arr = new int[quan][quan];
int fangxiang = 1;//1,2,3,4分别代表右,下,左,上
//计数变量
int num = 1;
//行数
int h = 0;
//列数
int l = 0;
//开始输入
while(num <= quan * quan) {
//将num存入数组并加一
arr[h][l] = num;
num++;
//判断下一步的方向并执行相应操作
switch(fangxiang) {
case 1:
if(l + 1 < quan && arr[h][l + 1] == 0) {//索引不越界,并且在该方向上下一个值未被赋值
l++;//沿方向增长
}else {
fangxiang = 2;//改变方向
h++;//沿方向增长
}
break;
case 2:
if(h + 1 < quan && arr[h + 1][l] == 0) {
h++;
}else {
fangxiang = 3;
l--;
}
break;
case 3:
if(l - 1 >= 0 && arr[h][l - 1] == 0) {
l--;
}else {
fangxiang = 4;
h--;
}
break;
case 4:
if(h - 1 >= 0 && arr[h - 1][l] == 0) {
h--;
}else {
fangxiang = 1;
l++;
}
break;
default:
}
}
//遍历输出数组
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
|