代码纯享:
import java.util.Scanner;
public class FiveTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
int num = scanner.nextInt();
int[][] nums = new int[num][num];
int k = 1;
int s = num * num;
int i = 0,j = 0;
for (int m = 1; m <= s; m++) {
if (k == 1) {
if (j < num && nums[i][j] == 0) {
nums[i][j++] = m;
} else {
k = 2;
i++;
j--;
m--;
}
} else if (k == 2) {
if (i < num && nums[i][j] == 0) {
nums[i++][j] = m;
} else {
k = 3;
i--;
j--;
m--;
}
} else if (k == 3) {
if (j >= 0 && nums[i][j] == 0) {
nums[i][j--] = m;
} else {
k = 4;
i--;
j++;
m--;
}
} else if (k == 4) {
if (i>=0 && nums[i][j] == 0) {
nums[i--][j] = m;
} else {
k = 1;
i++;
j++;
m--;
}
}}
for (int l = 0; l < nums.length; l++) {
for (int n = 0; n < nums[l].length; n++) {
System.out.print(nums[l][n] + "\t");
}
System.out.println();
}
scanner.close();
}}
效果预览:
代码解析:
import java.util.Scanner;
public class FiveTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//引用Scanner方法实现键盘输入
System.out.println("请输入数字:");
int num = scanner.nextInt();
int[][] nums = new int[num][num];//定义二维数组
int k = 1;//k = 1向右,k = 2 向下,k = 3向左,k = 4向上
int s = num * num;//回形数中最大数字为键盘输入数字的平方
int i = 0,j = 0;
for (int m = 1; m <= s; m++) {//定义m=1,也就是第一个数字,即nums[0][0],当m小于最大值s时,m停止赋值
if (k == 1) {//从nums[0][0] = 1开始赋值,横向依次向右赋值
if (j < num && nums[i][j] == 0) {//j<num时,此行赋值完毕,nums[i][j] == 0限制赋值过的不再赋值
//if里条件顺序不可调换
nums[i][j++] = m;//横向依次向右赋值
} else {
k = 2;//为进入下一个条件做准备,k赋值为2
i++;//i加一:从下一行开始赋值
j--;//j减一:将加冒的横向坐标减回来
m--;//m减一:将最后未在条件里运用的m++减回来
//下面的else中条件同理
}
} else if (k == 2) {//向下走
if (i < num && nums[i][j] == 0) {//向右走到头
nums[i++][j] = m;//从nums[0][num - 1]向下走
} else {
k = 3;//为进入下一个条件做准备,k赋值为3
i--;//i减一:将加冒的竖向坐标减回来
j--;//j加一:从下一列开始赋值
m--;//m减一:将最后未在条件里运用的m++减回来
}
} else if (k == 3) {//向左走
if (j >= 0 && nums[i][j] == 0) {//向左走知道横向坐标变为0
nums[i][j--] = m;//从nums[num-1][num - 1]向左走
} else {
k = 4;//为进入下一个条件做准备,k赋值为4
i--;//i减一:从上一行开始赋值
j++;//j加一:将减冒的横向坐标加回来
m--;//m减一:将最后未在条件里运用的m++减回来
}
} else if (k == 4) {//向上走
if (i>=0 && nums[i][j] == 0) {//向上走到最上方
nums[i--][j] = m;//向上走到最上方
} else {
k = 1;//回到k = 1,继续向右走
i++;//i减一:将减冒的竖向坐标加回来
j++;//j加一:从下一列开始赋值
m--;//m减一:将最后未在条件里运用的m++减回来
}
}}
//该循环完成后,所有数组内数字均已赋值
//遍历,输出
for (int l = 0; l < nums.length; l++) {
for (int n = 0; n < nums[l].length; n++) {
System.out.print(nums[l][n] + "\t");
}
System.out.println();
}
scanner.close();
}}