import java.util.*; class Magic { public static void main(String[] args) { int size = Integer.parseInt( args[0] ); size = Math.abs(size); size = size * 2 + 1; Map m; m = new HashMap(); for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { String key = row + ", " + col; m.put(key, 0); } } System.out.println( m ); Magic.show(m, size); int row = size-1; int col = size / 2; int k = 1; while (k <= size * size) { m.put( row + ", " + col , k ); Magic.show(m, size); System.out.println( " ----------------- " ); k = k + 1; String key = ((row + 1) % size) + ", " + ((col + 1) % size) ; if (m.get(key) != 0) { row = row - 1; } else { // it is zero row = (row + 1) % size; col = (col + 1) % size; } } Magic.show(m, size); } static void show(Map m, int size) { for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { String key = row + ", " + col; System.out.printf( "%3d ", m.get(key) ); } System.out.println(); } } }