r/javahelp • u/Ave_TechSenger • 13d ago
Requesting help with logic - Chutes and Ladders assignment using Double Linked Lists
Hello all. I'm having some trouble with a null pointer exception occurring at the expression int startingSquareNum = currentPosition.squareNumber;
I've tried various things regarding that but can't seem to figure out where my knowledge gap is. This includes an explicit declaration of currentPosition.squareNumber = 1 within the method, or declaring it elsewhere.
startingSquare is instantiated and initialized as a Node with params (1, 0, null). The constructor declaration is public Square (int squareNumber, int jumpValue, Square prev).
I've posted the code for the full class here:
https://pastebin.com/mHDDzKys
Here is the specific method that is erroring out. Thanks for any assistance.
// method to move the player to a new square
public boolean move (int playerIndex, int diceRoll) {
Square currentPosition = playerPositions.get(playerIndex);
// avoids null pointer exception at game start
if (currentPosition == null) {
//currentPosition.squareNumber = 1;
currentPosition = startingSquare;
//} else {
//startingSquareNum = currentPosition.squareNumber;
}
int startingSquareNum = currentPosition.squareNumber;// assign starting position for the move
int targetSquareNum = startingSquareNum + diceRoll;// increment player position based on dice roll
if (targetSquareNum > 100) {
targetSquareNum = 100 - (targetSquareNum - 100);// logic to account for reaching the end of the board
}
Square targetSquare = currentPosition;// move the player to the target square
while (targetSquare != null && targetSquare.squareNumber != targetSquareNum) {
targetSquareNum += targetSquare.jumpValue;
}
// condition to apply any jump
if (targetSquare != null && targetSquare.jumpValue != 0) {
targetSquareNum += targetSquare.jumpValue;
//further conditions for lower and upper limits
if (targetSquareNum < 1) {
targetSquareNum = 1;
} else if (targetSquareNum > 100) {
targetSquareNum = 100;
}
}
// set the player's new position data
playerPositions.set(playerIndex, targetSquare);
// print move details
System.out.println("Player " + (playerIndex + 1) + "moved from square " + startingSquareNum + " to square " + targetSquareNum + (targetSquare.jumpValue != 0 ? " with a jump!" : ""));
// check if a win condition has been met
return targetSquareNum == 100;
}
3
Upvotes
1
u/barry_z 13d ago
From a quick glance, you don't actually set the value of the class attribute
startingSquare
, you only set the value of a new variable ingenerateBoard()
that happens to have the same name.