Here's the code developed in A201 (on Apr 20, 2005), in class:
class Magic {
  public static void main(String[] args) {
    int n = Integer.parseInt(args[0]);
    int[][] sq = new int[n][n];
    int i = sq.length - 1;
    int j = sq.length / 2;
    for (int k = 1; k <= n * n; k++) {
      sq[i][j] = k;
      int ni = (i + 1) % sq.length;
      int nj = (j + 1) % sq.length;
      if (   sq[ni][nj] != 0 
         || (i == sq.length - 1 && j == sq.length - 1)) 
      { 
        ni = i - 1;
        if (ni < 0) 
          ni = sq.length;
        nj = j;
      }
      i = ni;
      j = nj;
    }
    for (i = 0; i < sq.length; i++) {
      for (j = 0; j < sq[i].length; j++) {
        String num = "   " + sq[i][j];
        System.out.print(num.substring(num.length() - 3) + " ");
      }
      System.out.println();
    }
  }
}
If you want to see it in action here it is:
frilled.cs.indiana.edu%java Magic 3
  4   9   2
  3   5   7
  8   1   6
frilled.cs.indiana.edu%java Magic 5
 11  18  25   2   9
 10  12  19  21   3
  4   6  13  20  22
 23   5   7  14  16
 17  24   1   8  15
frilled.cs.indiana.edu%java Magic 17
137 156 175 194 213 232 251 270 289   2  21  40  59  78  97 116 135
136 138 157 176 195 214 233 252 271 273   3  22  41  60  79  98 117
118 120 139 158 177 196 215 234 253 272 274   4  23  42  61  80  99
100 119 121 140 159 178 197 216 235 254 256 275   5  24  43  62  81
 82 101 103 122 141 160 179 198 217 236 255 257 276   6  25  44  63
 64  83 102 104 123 142 161 180 199 218 237 239 258 277   7  26  45
 46  65  84  86 105 124 143 162 181 200 219 238 240 259 278   8  27
 28  47  66  85  87 106 125 144 163 182 201 220 222 241 260 279   9
 10  29  48  67  69  88 107 126 145 164 183 202 221 223 242 261 280
281  11  30  49  68  70  89 108 127 146 165 184 203 205 224 243 262
263 282  12  31  50  52  71  90 109 128 147 166 185 204 206 225 244
245 264 283  13  32  51  53  72  91 110 129 148 167 186 188 207 226
227 246 265 284  14  33  35  54  73  92 111 130 149 168 187 189 208
209 228 247 266 285  15  34  36  55  74  93 112 131 150 169 171 190
191 210 229 248 267 286  16  18  37  56  75  94 113 132 151 170 172
173 192 211 230 249 268 287  17  19  38  57  76  95 114 133 152 154
155 174 193 212 231 250 269 288   1  20  39  58  77  96 115 134 153
sluggo%