I have to write a program that takes in an odd number from the user and creates a magic square. A magic square is one where the sum of each row, column, and diagonal is the same
Removing 3.4 will probably fix your code.
public static void main(String[] args) {
System.out.print("Give an odd number: ");
int n = console.nextInt();
int[][] magicSquare = new int[n][n];
int number = 1;
int row = 0;
int column = n / 2;
int curr_row;
int curr_col;
while (number <= n * n) {
magicSquare[row][column] = number;
number++;
curr_row = row;
curr_col = column;
row -= 1;
column += 1;
if (row == -1) {
row = n - 1;
}
if (column == n) {
column = 0;
}
if (magicSquare[row][column] != 0) {
row = curr_row + 1;
column = curr_col;
if (row == -1) {
row = n - 1;
}
}
}
for (int i = 0; i < magicSquare.length; i++) {
for (int j = 0; j < magicSquare.length; j++) {
System.out.print(magicSquare[i][j] + " ");
}
System.out.println();
}
}
Setting n = 3 gets me the following output which seems correct.
8 1 6
3 5 7
4 9 2
The logic of your square ensures that the top right corner is never written to.
if in the upper right corner, then drop down to next row.
And here's the code that does it...
if (row == 0 && column == n - 1) {
column = n -1;
row += 1;
So, you're always going to move away from that location before you enter any value on your next iteration. You don't actually need that line that sets the column to n - 1 as it's already n - 1 by definition of the logic above it.
You're actually writing the value 2 to the second row, third column. It is then later overwritten by the value 5. If you output the values of your array after each iteration of your program, then you'll see how the state of your model is changing.