Program created in BlueJ:
For this Assignment I am to create a magic square from odd numbers >= 3 input by the user.

I want to test my code to see if it works, but I can't figure out how to actually print the square from the number input by a user. When the program compiles, and I run it the terminal window doesn't even show up, before I started messing around trying to figure out the printSquare method, it would show and ask for user input.

My program has to be in 2 classes. MagicSquare and MagicSquareTester.

``````public class MagicSquare
{
private int n;                        //Holds size of MagicSquare
private int [][] magicSquare;         //Create a 2d array named magicSquare
private int rowSum = 0;
private int colSum = 0;               //To hold the sums
private int diagSumLR = 0;
private int diagSumRL = 0;
private boolean magicRow = true;      //To check if all rows/cols are equal
private boolean magicCol = true;
private boolean magicDiagLR = true;   //Checks if diagonals are equal
private boolean magicDiagRL = true;
int num = n*(n*n + 1) / 2;            //MagicSquare equation to check is col/row/diag sums
//are equal

//Create a constructor that assigns space for the 2d array of the MagicSquare
public MagicSquare(int num)
{
n = num;                           //@n declare variable num to hold values
magicSquare = new int [num][num];  //2d array named magicSquare that has certain "num"ber of
//rows and columns, to be determined by user input
makeSquare();
}

//Method statement to fill the array with numbers from 1 to n^2 in ascending order
//starting at the bottom, middle cell. Repeatedly assign the next integer to the cell next to it,
//right down diagonally. If that cell has already been filled, use the cell above the one you
//are moving from.
public void makeSquare()
{
int posA = n-1;                   //starting at the bottom row
int posB = n/2;                   //in the middle

//for loop for starting at number 1
for(int i = 1; i <= n*n; i++)
{
magicSquare[posA][posB] = i;       //put following number inside square then
posA++;                            //move down 1 & then
posB++;                            //move right 1

//If the last location from the move was at the bottom edge and the
//next location is occupied, need to make an adjustment
if(posA == n && posB ==n)      //if previous spot was at right bottom edge of square
posA = n-2;                //back track 2 spaces
posB = n-1;                //and move over 1 space above previous location
}

//If number is at bottom edge, wrap around square to top part
if(posA >= n)
posA = 0;
//If number is at right edge, wrap around right edge to left side
if(posB >=n)
posB = 0;

//If next spot is occupied
if(magicSquare[posA][posB] !=0)
{
posA -= 2;                   //Move to position where you were previously
posB--;                      //and go above it
}
}
}

//Method to calcuate rowSum, colSum, and diagSum
public void checkSquare()
{
//Go through row/cols & add up everything
for (int row = 0; row < n; row++)
{
for(int col = 0; col < n; col++)
{
rowSum += magicSquare[row][col];
colSum += magicSquare[row][col];

//Add up diagonals leftbottom to upright & rightbottom to upleft
//@n ie. n=3 - row 0 - 1 = row 2, col 2 = value 6 plus...
//n=3 - row 1 - 1 = row 1, col 1 = value 5
diagSumLR += magicSquare[row][col];
diagSumRL += magicSquare[n-row-1][col];
}

//All calculated sums must equal the equation in order to count as MagicSquare
magicRow = rowSum == num;
magicCol = colSum == num;
magicDiagLR = diagSumLR == num;
magicDiagRL = diagSumRL == num;

}
}

public static void printSquare()
{
This is my trouble spot
}
}``````

Tester Class

``````import java.util.Scanner;
public class MagicSquareTester
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
int input = Integer.parseInt(keyboard.nextLine());

Am I properly accessing my MagicSquare class?
MagicSquare mSquare = new MagicSquare(input);

//Ask the user for an odd number
System.out.print("Enter an odd number >= 3 to create a Magic Square: ");
input = keyboard.nextInt();

//Ensure input is greater than 3, otherwise prompt user
while( input < 3 || (input % 2) == 0 )
{
System.out.println("Invalid entry. Please enter an number >=3");
input = keyboard.nextInt();
}

System.out.println();

How do I call printSquare and print it out?
}
}``````

Tips, tricks, explanations would be great. Thanks

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.