为什么显示数组越界了呢


import java.util.Scanner;

public class 魔方阵 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner  sc = new  Scanner(System.in);
        int N=sc.nextInt();
        int [][] arr = new int [N][N];
        for(int i=0;i<N;i++) {
            for(int j=0;j<N;j++) {
                arr[i][j]=0;
            }
        }

    int i=0;
    int j=N/2+1;
    arr[i][j]=1;
    
    for(int k=2;k<=N*N;k++) {
        i=i-1;//i是列--是向上移动
        j=j+1;//往右上角填数,j是行向右移动++

        if(i<0) {
            i=N-1;
            arr[i][j]=k;
        }
        
        else if(j>N) {
            j=0;
            arr[i][j]=k;
        }
        
        else if(arr[i][j]!=0) {
            i=i+1;
            arr[i][j]=k;
        }
        
    }
    

    for(int i1=0;i1<N;i1++) {
        for(int j1=0;j1<N;j1++) {
            System.out.print(arr[i1][j1]+"/t");
        }
    }
    }

}

自己debug 一下就知道了:

img

参考如下:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[][] arr = new int[N][N];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                arr[i][j] = 0;
            }
        }

        int x = 0, y = N / 2; // 初始位置
        for (int i = 1; i <= N * N; i++) {
            arr[x][y] = i; // 填充当前位置

            // 计算下一个位置
            int nx = (x - 1 + N) % N;
            int ny = (y + 1) % N;

            if (arr[nx][ny] == 0) { // 下一个位置为空
                x = nx;
                y = ny;
            } else { // 下一个位置已被填充
                x = (x + 1) % N;
            }
        }


        for (int i1 = 0; i1 < N; i1++) {
            for (int j1 = 0; j1 < N; j1++) {
                System.out.print(arr[i1][j1] + "\t");
            }
            System.out.println();
        }
    }