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
{ //instead of wrapping around
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