//import MagicSquare;public class SinglyEvenOrderMagicSquare extends MagicSquare {
public SinglyEvenOrderMagicSquare(int startValue, int n) {
super(startValue, n); int m = n/2; OddOrderMagicSquare magicSquare00 = new OddOrderMagicSquare(startValue, m); OddOrderMagicSquare magicSquare01 = new OddOrderMagicSquare(startValue+2*m*m, m); OddOrderMagicSquare magicSquare10 = new OddOrderMagicSquare(startValue+3*m*m, m); OddOrderMagicSquare magicSquare11 = new OddOrderMagicSquare(startValue+m*m, m); adjustLeft(magicSquare00, magicSquare10); adjustRight(magicSquare01, magicSquare11); combine(magicSquare00, magicSquare01, magicSquare10, magicSquare11);}
private void adjustLeft(OddOrderMagicSquare magicSquare00,
OddOrderMagicSquare magicSquare10) {
int m = magicSquare00.getOrder(); int middleRow = m/2; int startCol; int endCol; for (int row=0; row<m; row++) { if (row == middleRow) { startCol = 1; endCol = middleRow; } else { startCol = 0; endCol = middleRow-1; } for (int col=startCol; col<=endCol; col++) { int cell00 = magicSquare00.getCell(row, col); int cell10 = magicSquare10.getCell(row, col); magicSquare00.setCell(row, col, cell10); magicSquare10.setCell(row, col, cell00); } }}
private void adjustRight(OddOrderMagicSquare magicSquare01,
OddOrderMagicSquare magicSquare11) {
int m = magicSquare01.getOrder(); int cols = m/2-1; int startCol = m-1; for (int row=0; row<m; row++) { for (int col=startCol; col>startCol-cols; col--) { int cell01 = magicSquare01.getCell(row, col); int cell11 = magicSquare11.getCell(row, col); magicSquare01.setCell(row, col, cell11); magicSquare11.setCell(row, col, cell01); } }}
private void combine(OddOrderMagicSquare magicSquare00,
OddOrderMagicSquare magicSquare01, OddOrderMagicSquare magicSquare10, OddOrderMagicSquare magicSquare11) { int n = getOrder(); int m = magicSquare00.getOrder(); for (int row=0; row<m; row++) { for (int col=0; col<m; col++) { setCell(row, col, magicSquare00.getCell(row, col)); } for (int col=m; col<n; col++) { setCell(row, col, magicSquare01.getCell(row, col-m)); } } for (int row=m; row<n; row++) { for (int col=0; col<m; col++) { setCell(row, col, magicSquare10.getCell(row-m, col)); } for (int col=m; col<n; col++) { setCell(row, col, magicSquare11.getCell(row-m, col-m)); } }}
public static void main(String[] args) {
MagicSquare magicSquare; for (int i=1; i<4; i++) { int n = 4*i+2; System.out.println/(n+" by "+n+" magic square:"); magicSquare = MagicSquareFactory.create(1, n); System.out.println/(magicSquare); }}
}