迷路の生成

Maze Ganerator

棒倒し法での迷路生成です。
JavaScript置き場に置いてあるやつとやっていることは変わらないのですが、
「配列、pushもpopもできねえのかよ」とキレながら書いていました。


import java.util.*;

// geschrieben von Beliar698ma

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

    Scanner sc = new Scanner(System.in);
    int num = 0;
    System.out.println("迷路のサイズを入力してください(数値1つ, 5以上の奇数):");

    if (sc.hasNextInt()) {
      num = sc.nextInt();
    } else {
      System.out.println("有効な値を入力してください。");
      return;
    }

    if (num < 5 || num % 2 == 0)  {
      System.out.println("「5以上」の「奇数」を入力してください。");
      return;
    }

    char[][] mazeBody = new char [num][num];

    // 壁を作って棒を刺す

    for (int i = 0; i < num; i++) {
      for (int j = 0; j < num; j++) {
        if (i == 0 || i == num - 1 || j == 0 || j == num - 1) {
          mazeBody[i][j] = '■';
        } else if (i % 2 == 0 && j % 2 == 0) {
          mazeBody[i][j] = '■';
        } else {
          mazeBody[i][j] = ' ';
        }
      }
    }

    // 棒倒し
    for (int i = 1; i < num - 1; i++) {
      for (int j = 1; j < num - 1; j++) {
        if (i % 2 == 0 && j % 2 == 0) {
          int[][] dir = {
            {0, 1},
            {1, 0},
            {0, -1},
            {-1, 0}
          };
          boolean isTopRow = (i == 2);
          int directionCount = isTopRow ? 4 : 3;
          while(true) {
            int idx = (int)Math.floor(Math.random() * directionCount);
            int ny = i + dir[idx][0];
            int nx = j + dir[idx][1];

            if (mazeBody[ny][nx] == ' ') {
              mazeBody[ny][nx] = '■';
              break;
            } else {
              continue;
            }
          }
        }
      }
    }

    for (int i = 0; i < num; i++) {
      for (int j = 0; j < num; j++) {
        System.out.print(mazeBody[i][j]);
        if(j == num - 1) System.out.print("\n");
        else System.out.print(" ");
      }
    }
  }
}