我们发现这个回形数矩阵的逻辑是:→↓←↑四个为一个循环,故考虑框架为:一个外层for里面嵌套4个内层for
每个内层for的起点终点都随着外层的变化而变化
说实话这种问题只可意会不可言传,光看源码没什么用,你得逼着自己去思考,哪怕是一个下午,一天才做出来也比你直接看源码好啊~使劲想想现实逻辑怎么转化为for循环逻辑,一般看到那个→↓←↑就会感觉这四个地位等价,就尝试着把这四个for放到一个外层大for里面,一点一点试出来~
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("输入一个数,返回回形数矩阵");
int i = scan.nextInt();
// 键盘输入一个数
int[][] arr = new int[i][i];
int m = 1;//用于赋值
/*思考循环数的逻辑顺序,→↓←↑四个为一个循环,故考虑框架为一个外层for里面套4个内层for*/
/*每一个循环的→↓←↑内层for循环,其起点和终点都不断改变,所以起点终点必须表现出来这个联系,绝不能为常数*/
for (int j = 0; j < i; j++) {
for (int k = j; k < i - j; k++) {//k=j和k<i-j都在不断的改变
arr[j][k] = m;
m++;
}
for (int l = j + 1; l < i - j; l++) {
arr[l][i - j - 1] = m;
m++;
}
for (int p = i - j - 2; p > j - 1; p--) {
arr[i - j - 1][p] = m;
m++;
}
for (int q = i - j - 2; q > j; q--) {
arr[q][j] = m;
m++;
}
}
// 输出矩阵
for (int a = 0; a < arr.length; a++) {
for (int b = 0; b < arr[a].length; b++) {
System.out.print(arr[a][b] + "\t");
}
System.out.println();
}
}
}