Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

4. Magic Squares One interesting application of two-dimensional arrays is magic

ID: 3787608 • Letter: 4

Question

4. Magic Squares

One interesting application of two-dimensional arrays is magic squares. A magic square is asquare matrix in which the sum of every row, every column, and both diagonals is the same.Magic squares have been studied for many years, and there are some particularly famous magicsquares. In this exercise you will write code to determine whether a square is magic.

File Square.java contains the shell for a class that represents a square matrix. It containsheaders for a constructor that gives the size of the square and methods to read values into thesquare, print the square, find the sum of a given row, find the sum of a given column, find thesum of the main (or other) diagonal, and determine whether the square is magic. Note that theread method takes a Scanner object as a parameter.

File SquareTest.java contains the shell for a program that reads input for squares from a filenamed magicData and tells whether each is a magic square. The complete program is given toyou. Note that the main method reads the size of a square, then after constructing the square ofthat size, it calls the readSquare method to read the square in. The readSquare method must besent the Scanner object as a parameter.

You should find that the first, second, and third squares in the input are magic, and that the rest(fourth through seventh) are not. Note that the -1 at the bottom tells the test program to stopreading.

Explanation / Answer

Hi buddy, I've completed the missing and code and tested the solution by reading the input from console. It was working fine. Important thing is keep in mind that the array is 0-indexed.

// Define a Square class with methods to create and read in

// info for a square matrix and to compute the sum of a row,
// a column, either diagonal, and whether it is magic.
//
// ****************************************************************
import java.util.Scanner;
import java.io.*;

public class Square {

int[][] square;

//--------------------------------------
//create new square of given size
//--------------------------------------
public Square(int size) {
square = new int[size][size];
}

//-----------------------------------------------
//return the sum of the values in the given row
//-----------------------------------------------
public int sumRow(int row) {
// Add your code here
int sum = 0;
for (int i = 0; i < square.length; i++) {
sum = sum + square[row][i];
}
return sum;
}

//-------------------------------------------------
//return the sum of the values in the given column
//-------------------------------------------------
public int sumCol(int col) {
// Add your code here
int sum = 0;
for (int i = 0; i < square.length; i++) {
sum = sum + square[i][col];
}
return sum;

}

//---------------------------------------------------
//return the sum of the values in the main diagonal
//---------------------------------------------------
public int sumMainDiag() {
// Add your code here
int sum = 0;
for (int i = 0; i < square.length; i++) {
sum = sum + square[i][i];
}
return sum;

}

//---------------------------------------------------------------
//return the sum of the values in the other ("reverse") diagonal
//---------------------------------------------------------------
public int sumOtherDiag() {
// Add your code here
int sum = 0;
for (int i = 0; i < square.length; i++) {
sum = sum + square[square.length - i - 1][i];
}
return sum;

}

//-------------------------------------------------------------------
//return true if the square is magic (all rows, cols, and diags have
//same sum), false otherwise
//-------------------------------------------------------------------
public boolean magic() {

// Add your code here. Check if the sum of main diagonal equals the other diagonal,
// also if all rows and all columns sums equal to the diagonal as well. Any uneuqal will
// terminate the comparison.
int d1 = sumMainDiag();
int d2 = sumOtherDiag();
if (d1 != d2) {
return false;
}
for (int i = 0; i < square.length; i++) {
if (d1 != sumRow(i) || d1 != sumCol(i)) {
return false;
}
}
return true;

}

//----------------------------------------------------
//read info into the square from the standard input.
//----------------------------------------------------
public void readSquare(Scanner scan) {
for (int row = 0; row < square.length; row++) {
for (int col = 0; col < square.length; col++) {
square[row][col] = scan.nextInt();
}
}
}

//---------------------------------------------------
//print the contents of the square, neatly formatted
//---------------------------------------------------
public void printSquare() {
for (int row = 0; row < square.length; row++) {
for (int col = 0; col < square.length; col++) {
System.out.print(square[row][col] + " ");
}
System.out.println();
}
}
}

// ****************************************************************
// SquareTest.java
//
// Uses the Square class to read in square data and tell if
// each square is magic.
//
// ****************************************************************

class SquareTest {

public static void main(String[] args) throws IOException {

File file = new File("magicData.txt");
Scanner scan = new Scanner(file);

int count = 1; //count which square we're on
int size = scan.nextInt(); //size of next square

//Expecting -1 at bottom of input file
while (size != -1) {
//create a new Square of the given size
Square magicSquare = new Square(size);

//call its read method to read the values of the square
magicSquare.readSquare(scan);

System.out.println(" ******** Square " + count + " ********");
//print the square
magicSquare.printSquare();

//print the sums of its rows
for (int row = 0; row < size; row++) {
System.out.println("Sum of row " + row + ": "
+ magicSquare.sumRow(row));
}

//print the sums of its columns
for (int col = 0; col < size; col++) {
System.out.println("Sum of column " + col + ": "
+ magicSquare.sumCol(col));
}

//print the sum of the main diagonal
System.out.println("Sum of the main diagonal: "
+ magicSquare.sumMainDiag());

//print the sum of the other diagonal
System.out.println("Sum of the other diagonal: "
+ magicSquare.sumOtherDiag());

//determine and print whether it is a magic square
if (magicSquare.magic()) {
System.out.println("It's a magic square!");
} else {
System.out.println("It's not a magic square!");
}

System.out.println();

//get size of next square
size = scan.nextInt();
count++;
}

}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote