回形数格式方阵的实现,设定矩阵阶数,元素顺时针增大1

回形数格式方阵的实现
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。
例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

import java.util.Scanner;

public class HuiWen_leak {
    public static void main(String[] args) {

        System.out.println("请输入数组方阵的阶数len:");
        Scanner scan = new Scanner(System.in);
        int len = scan.nextInt();
        scan.close();

        int[][] arr = new int[len][len];
        int x = 1; // 用来对数组矩阵元素赋值,加入自增
        
        // 数组元素的赋值 ------------------------------------------------
        for (int m = 0; m < len / 2; m++) {
            // 设置flag判断数组矩阵元素的赋值方向
            // 当flag%4分别是1,2,3,4时,代表→ ↓ ← ↑的顺序依次赋值
            int flag = 1;
            // → ---------
            if (flag % 4 == 1) {
                flag++;
                for (int i = m, j = m; j < len - 1 - m; j++) {
                    arr[i][j] = x;
                    x++;
                }
            }
            // ↓ ---------
            if (flag % 4 == 2) {
                flag++;
                for (int i = m, j = len - 1 - m; i < len - 1 - m; i++) {
                    arr[i][j] = x;
                    x++;
                }
            }
            // ← ---------
            if (flag % 4 == 3) {
                flag++;
                for (int i = len - 1 - m, j = len - 1 - m; j > m; j--) {
                    arr[i][j] = x;
                    x++;
                }
            }
            // ↑ ----------
            if (flag % 4 == 0) {
                flag++;
                for (int i = len - 1 - m, j = m; i > m; i--) {
                    arr[i][j] = x;
                    x++;
                }
            }

        }

        // 遍历输出数组元素------------------------------------------
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i][j] < 10)
                    System.out.print("0" + arr[i][j] + " ");
                else
                    System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }

        
    }
}

如果输入的阶数是奇数,那最中间元素就会是0
如果输入的阶数是偶数,就不会有问题,这是为什么呢?

请输入数组方阵的阶数len:
3
01 02 03 
08 00 04 
07 06 05 
请输入数组方阵的阶数len:
5
01 02 03 04 05 
16 17 18 19 06 
15 24 00 20 07 
14 23 22 21 08 
13 12 11 10 09 
请输入数组方阵的阶数len:
6
01 02 03 04 05 06 
20 21 22 23 24 07 
19 32 33 34 25 08 
18 31 36 35 26 09 
17 30 29 28 27 10 
16 15 14 13 12 11 
我的解答思路和尝试过的方法
我想要达到的结果