I keep getting an infinite loop when i run my program. I've narrowed it down to the main class, i believe, can anyone give me some advice on where the problem is? I know it is a lot of code--and I apologize.
public class TicTacToe
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
//welcome user
MessagePrinter.printWelcomeMessage();
boolean continuePlaying = true;
//keep game running while...
while (continuePlaying)
{
//prompt for one or two player game
MessagePrinter.printPromptForOneOrTwoPlayerGame();
int oneOrTwoPlayerGame = Integer.parseInt(input.nextLine());
if (oneOrTwoPlayerGame == 3)
{
continuePlaying = false;
}else
{
Player player1 = null;
Player player2 = null;
Board board = new Board();
if (oneOrTwoPlayerGame == 1)
{
//player one is selected
MessagePrinter.printPromptForPlayerName(1);
String humanPlayerName = input.nextLine();
//prompt first player to play
MessagePrinter.printPromptForUserOrComputerFirst();
int firstToPlay = Integer.parseInt(input.nextLine());
if (firstToPlay == 1)
{
player1 = new HumanPlayer(humanPlayerName, Move.X);
player2 = new ComputerPlayer(board, Move.O);
}else
{
player1 = new ComputerPlayer(board, Move.X);
player2 = new HumanPlayer(humanPlayerName, Move.O);
}
}else
{
MessagePrinter.printPromptForPlayerName(1);
String player1Name = input.nextLine();
MessagePrinter.printPromptForPlayerName(2);
String player2Name = input.nextLine();
player1 = new HumanPlayer(player1Name, Move.X);
player2 = new HumanPlayer(player2Name, Move.O);
}
//store player
ArrayList<Player> players = new ArrayList<Player>();
players.add(player1);
players.add(player2);
MessagePrinter.printBoardMessage(board);
boolean wonGame = false;
Player winnerOfGame = null;
while ((continuePlaying) && (wonGame==false))
{
for (Player player : players)
{
boolean isMoveValid = false;
while ((continuePlaying) && (wonGame) && (isMoveValid=false))
{
MessagePrinter.printWhichPlayersMoveItIsMessage(player);
int row = player.getRow();
if (row == -1) {
continuePlaying = false;
}else
{
int column = player.getColumn();
if (column == -1) {
continuePlaying = false;
}else
{
isMoveValid = board.isMoveValid(row, column);
if (isMoveValid)
{
board.move(row, column, player.getMove());
MessagePrinter.printBoardMessage(board);
if (board.isWinner(player.getMove()))
{
wonGame = true;
winnerOfGame = player;
}else
{
if (!board.isDraw())
continue;
wonGame = true;
winnerOfGame = null;
}
}
}
} }
}
if (wonGame==true)
{
continue;
}
if (!(winnerOfGame == null)) {
MessagePrinter.printGameEndedWithWinnerMessage(winnerOfGame.getName());
}
else
{
MessagePrinter.printGameEndedInDrawMessage(player1.getName(), player2.getName());
}
MessagePrinter.printPromptToPlayAgainMessage();
int playAgain = Integer.parseInt(input.nextLine());
continuePlaying = playAgain == 1;
}
}
}
MessagePrinter.printGoodByeMessage();
}
}