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

I am solving the 8 queens problem and I have most of the code done but I am gett

ID: 3706868 • Letter: I

Question

I am solving the 8 queens problem and I have most of the code done but I am getting a java.lang.NullPointerException in my isUnderAttack method and I'm not sure of how to fix it. My code is as posted below.

public class Queen {

public static final int BOARD_SIZE = 8;

public static final int EMPTY = 0;

public static final int QUEEN = 1;

private int board[][];

public void Queens(){

board = new int[BOARD_SIZE][BOARD_SIZE];

}

public void clearBoard(){

board = new int[BOARD_SIZE][BOARD_SIZE];

}

public void displayBoard(){

for ( int i = 0; i < BOARD_SIZE; i++) {

for( int j = 0; j < BOARD_SIZE; j++)

if (board[i][j] == QUEEN)

System.out.println("Queen at row " + (i+1) + " col " + (j +1));

}

for ( int i = 0; i < BOARD_SIZE; i++) {

System.out.println(" ");

for( int j = 0; j < BOARD_SIZE; j++)

if (board[i][j] == QUEEN)

System.out.print(" 1 ");

else System.out.print(" . ");

}

}

public boolean placeQueens(int column){

if(column >= BOARD_SIZE){

return true;

} else{

boolean queenPlaced =false;

int row = 1;

while(!queenPlaced && (row <= BOARD_SIZE)){

if (isUnderAttack(row, column)){ row++;

} else {

setQueen(row, column);

queenPlaced = placeQueens(column+1);

if(!queenPlaced){ removeQueen(row, column); ++row;

}

}

} return queenPlaced;

}

}

private void setQueen(int row, int column){

board[1][2] = QUEEN;

System.out.println("Queen placed at Col " + column +" row " + row);

} p

rivate void removeQueen(int row, int column){

board[row][column] = EMPTY;

System.out.println("Queen removed from Col " + column +" row " + row);

}

private boolean isUnderAttack(int row, int column) {

for ( int i = 0; i < BOARD_SIZE; i++) {

if (board[i][column] == QUEEN) return true;

}

for ( int i = 0; i < BOARD_SIZE; i++) {

if (board[row][i] == QUEEN) return true;

}

int r = row; int c = column;

while((r >= 0) && (c >= 0)) {

if (board[r][c] == QUEEN)

return true;

r--; c--;

}

r = row;

c = column;

while((r < BOARD_SIZE) && (c < BOARD_SIZE)) {

if (board[r][c] == QUEEN)

return true;

r++; c++;

}

r = row; c = column;

while((r >= 0 ) && (c < BOARD_SIZE)) {

if (board[r][c] == QUEEN)

return true;

r--; c++;

}

r = row; c = column;

while((r < BOARD_SIZE) && (c >= 0)) {

if (board[r][c] == QUEEN)

return true;

r++; c--;

}

return false;

}

private int index(int number){

return (number);

}

}

public static void main(String[] args){

Queen q = new Queen();

q.placeQueens(0);

q.displayBoard();

}

Explanation / Answer

Below is your code. I have added comments to help you uunderstand it ..

public class Queen {

// --------------------------static variables

// squares per row or column

public static final int BOARD_SIZE = 8;

// used to indicate an empty square

public static final int EMPTY = 0;

// used to indicate square contains a queen

public static final int QUEEN = 1;

// ------------------------------instance variables

private int board[][]; // chess board

// --------------------------constructor

public Queen() {

// -------------------------------------------------

// Constructor: Creates an empty square board.

// -------------------------------------------------

board = new int[BOARD_SIZE][BOARD_SIZE];

} // end constructor

// ------------------------------instance methods

public void clearBoard() {

board = new int[BOARD_SIZE][BOARD_SIZE]; // brute force

} // end clearBoard

// ---------------------------

public void displayBoard() {

for (int i = 0; i < BOARD_SIZE; i++) {

for (int j = 0; j < BOARD_SIZE; j++)

if (board[i][j] == QUEEN)

System.out.println("Queen at row " + (i + 1) + " col " + (j + 1));

}

// print out board

for (int i = 0; i < BOARD_SIZE; i++) {

System.out.println(" ");

for (int j = 0; j < BOARD_SIZE; j++)

if (board[i][j] == QUEEN)

System.out.print(" Q ");

else

System.out.print(" . ");

}

} // end displayBoard

// ------------------------------------

public boolean placeQueens(int column) {

System.out.println("placeQueens- trying column " + column);

if (column >= BOARD_SIZE) {

return true; // base case

} else {

boolean queenPlaced = false;

int row = 0; // number of square in column

while (!queenPlaced && (row < BOARD_SIZE)) {

// if square can be attacked

if (isUnderAttack(row, column)) {

++row; // consider next square in column

} // end if

else { // place queen and consider next column

setQueen(row, column);

queenPlaced = placeQueens(column + 1);

// if no queen is possible in next column,

if (!queenPlaced) {

// backtrack: remove queen placed earlier

// and try next square in column

removeQueen(row, column);

++row;

} // end if

} // end if

} // end while

return queenPlaced;

} // end if

} // end placeQueens

// -----------------------------------------

private void setQueen(int row, int column) {

board[row][column] = QUEEN;

System.out.println("setQueen - queen placed at Col " + column + " row " + row);

} // end setQueen

// ---------------------------------

private void removeQueen(int row, int column) {

board[row][column] = 0;

System.out.println("removeQueen - queen removed from Col " + column + " row " + row);

return;

} // end removeQueen

// ---------------------------------

private boolean isUnderAttack(int row, int column) {

// check rows and column for attack

for (int i = 0; i < BOARD_SIZE; i++) {

if (board[i][column] == QUEEN)

return true;

}

for (int i = 0; i < BOARD_SIZE; i++) {

if (board[row][i] == QUEEN)

return true;

}

// now check the diagonals

// from position to upper left

int r = row;

int c = column;

while ((r >= 0) && (c >= 0)) {

if (board[r][c] == QUEEN)

return true;

r--;

c--;

}

// from position to lower right

r = row;

c = column; // back to position

while ((r < BOARD_SIZE) && (c < BOARD_SIZE)) {

if (board[r][c] == QUEEN)

return true;

r++;

c++;

}

// from position to upper right

r = row;

c = column; // back to position

while ((r >= 0) && (c < BOARD_SIZE)) {

if (board[r][c] == QUEEN)

return true;

r--;

c++;

}

// from position to lower left

r = row;

c = column; // back to position

while ((r < BOARD_SIZE) && (c >= 0)) {

if (board[r][c] == QUEEN)

return true;

r++;

c--;

}

return false;

} // end isUnderAttack

// --------------------------------static method

public static void main(String[] args) {

Queen q = new Queen();

q.placeQueens(0);

q.displayBoard();

}

// -------------------------------------------

private int index(int number) {

return (number);

} // end index

} // end Queens

Output

placeQueens- trying column 0
setQueen - queen placed at Col 0 row 0
placeQueens- trying column 1
setQueen - queen placed at Col 1 row 2
placeQueens- trying column 2
setQueen - queen placed at Col 2 row 4
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 1
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 3
setQueen - queen placed at Col 4 row 7
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 7
removeQueen - queen removed from Col 3 row 1
setQueen - queen placed at Col 3 row 6
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 3
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 5
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 5
removeQueen - queen removed from Col 5 row 3
removeQueen - queen removed from Col 4 row 1
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 3
removeQueen - queen removed from Col 3 row 6
setQueen - queen placed at Col 3 row 7
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 3
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 5
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 5
removeQueen - queen removed from Col 5 row 3
removeQueen - queen removed from Col 4 row 1
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 3
removeQueen - queen removed from Col 3 row 7
removeQueen - queen removed from Col 2 row 4
setQueen - queen placed at Col 2 row 5
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 1
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 6
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 4
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 4
removeQueen - queen removed from Col 4 row 6
removeQueen - queen removed from Col 3 row 1
setQueen - queen placed at Col 3 row 7
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 3
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 3
setQueen - queen placed at Col 5 row 4
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 4
removeQueen - queen removed from Col 4 row 1
removeQueen - queen removed from Col 3 row 7
removeQueen - queen removed from Col 2 row 5
setQueen - queen placed at Col 2 row 6
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 1
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 7
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 7
removeQueen - queen removed from Col 4 row 3
setQueen - queen placed at Col 4 row 7
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 4
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 4
removeQueen - queen removed from Col 4 row 7
removeQueen - queen removed from Col 3 row 1
removeQueen - queen removed from Col 2 row 6
setQueen - queen placed at Col 2 row 7
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 1
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 3
setQueen - queen placed at Col 4 row 6
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 6
removeQueen - queen removed from Col 3 row 1
setQueen - queen placed at Col 3 row 5
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 1
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 1
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 4
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 4
removeQueen - queen removed from Col 5 row 1
removeQueen - queen removed from Col 4 row 3
removeQueen - queen removed from Col 3 row 5
removeQueen - queen removed from Col 2 row 7
removeQueen - queen removed from Col 1 row 2
setQueen - queen placed at Col 1 row 3
placeQueens- trying column 2
setQueen - queen placed at Col 2 row 1
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 4
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 2
setQueen - queen placed at Col 4 row 7
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 7
removeQueen - queen removed from Col 3 row 4
setQueen - queen placed at Col 3 row 6
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 2
removeQueen - queen removed from Col 3 row 6
setQueen - queen placed at Col 3 row 7
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 6
removeQueen - queen removed from Col 4 row 2
setQueen - queen placed at Col 4 row 5
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 2
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 2
removeQueen - queen removed from Col 4 row 5
removeQueen - queen removed from Col 3 row 7
removeQueen - queen removed from Col 2 row 1
setQueen - queen placed at Col 2 row 5
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 2
placeQueens- trying column 4
removeQueen - queen removed from Col 3 row 2
setQueen - queen placed at Col 3 row 7
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 4
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 2
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 2
removeQueen - queen removed from Col 5 row 4
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 2
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 2
removeQueen - queen removed from Col 5 row 6
removeQueen - queen removed from Col 4 row 1
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 4
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 4
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 6
removeQueen - queen removed from Col 4 row 2
removeQueen - queen removed from Col 3 row 7
removeQueen - queen removed from Col 2 row 5
setQueen - queen placed at Col 2 row 6
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 2
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 5
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 1
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 4
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 4
removeQueen - queen removed from Col 5 row 1
removeQueen - queen removed from Col 4 row 5
setQueen - queen placed at Col 4 row 7
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 1
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 4
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 4
removeQueen - queen removed from Col 5 row 1
removeQueen - queen removed from Col 4 row 7
removeQueen - queen removed from Col 3 row 2
setQueen - queen placed at Col 3 row 4
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 1
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 2
setQueen - queen placed at Col 4 row 7
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 1
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 1
removeQueen - queen removed from Col 4 row 7
removeQueen - queen removed from Col 3 row 4
removeQueen - queen removed from Col 2 row 6
setQueen - queen placed at Col 2 row 7
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 2
placeQueens- trying column 4
removeQueen - queen removed from Col 3 row 2
setQueen - queen placed at Col 3 row 4
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 1
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 1
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
removeQueen - queen removed from Col 4 row 2
removeQueen - queen removed from Col 3 row 4
removeQueen - queen removed from Col 2 row 7
removeQueen - queen removed from Col 1 row 3
setQueen - queen placed at Col 1 row 4
placeQueens- trying column 2
setQueen - queen placed at Col 2 row 1
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 5
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 3
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 3
removeQueen - queen removed from Col 5 row 6
removeQueen - queen removed from Col 4 row 2
removeQueen - queen removed from Col 3 row 5
setQueen - queen placed at Col 3 row 7
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 3
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 3
removeQueen - queen removed from Col 5 row 6
removeQueen - queen removed from Col 4 row 2
setQueen - queen placed at Col 4 row 5
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 2
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 2
setQueen - queen placed at Col 5 row 3
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 3
removeQueen - queen removed from Col 4 row 5
removeQueen - queen removed from Col 3 row 7
removeQueen - queen removed from Col 2 row 1
setQueen - queen placed at Col 2 row 6
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 1
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 7
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 7
removeQueen - queen removed from Col 4 row 3
setQueen - queen placed at Col 4 row 5
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 2
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 2
setQueen - queen placed at Col 5 row 7
placeQueens- trying column 6
removeQueen - queen removed from Col 5 row 7
removeQueen - queen removed from Col 4 row 5
removeQueen - queen removed from Col 3 row 1
removeQueen - queen removed from Col 2 row 6
setQueen - queen placed at Col 2 row 7
placeQueens- trying column 3
setQueen - queen placed at Col 3 row 1
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 3
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 2
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 2
removeQueen - queen removed from Col 5 row 6
removeQueen - queen removed from Col 4 row 3
setQueen - queen placed at Col 4 row 6
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 2
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 5
placeQueens- trying column 7
removeQueen - queen removed from Col 6 row 5
removeQueen - queen removed from Col 5 row 2
removeQueen - queen removed from Col 4 row 6
removeQueen - queen removed from Col 3 row 1
setQueen - queen placed at Col 3 row 5
placeQueens- trying column 4
setQueen - queen placed at Col 4 row 2
placeQueens- trying column 5
setQueen - queen placed at Col 5 row 6
placeQueens- trying column 6
setQueen - queen placed at Col 6 row 1
placeQueens- trying column 7
setQueen - queen placed at Col 7 row 3
placeQueens- trying column 8
Queen at row 1 col 1
Queen at row 2 col 7
Queen at row 3 col 5
Queen at row 4 col 8
Queen at row 5 col 2
Queen at row 6 col 4
Queen at row 7 col 6
Queen at row 8 col 3
  
Q . . . . . . .
. . . . . . Q .
. . . . Q . . .
. . . . . . . Q
. Q . . . . . .
. . . Q . . . .
. . . . . Q . .
. . Q . . . . .

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Chat Now And Get Quote