title: Tic Tac Toe Program Loop Problems
body: <p>EDIT: I've noticed that my program outputs "Invalid move" when you put in an incorrect number for the TicTacToe table. What would cause this? I only use my move(row, col) method once so it shouldn't repeat Invalid Input twice.</p>
  
  <p>I've been constructing a Tic Tac Toe program and I'm 99.9% done I believe. There is one pesky loop that I cannot figure out, and I've been adding things for a while to try and fix it. I think it's just a small dumb mistake I can't seem to notice by myself. </p>
  
  <p>Anyway the problem is once I completed a game and type Yes the program terminates and ends. What could be causing this since I put my while loop inside of another do while loop so I could break out of it and then just go back into it right away. </p>
  
  <p>Here is my entire code.</p>
  
  <pre><code>import java.util.Scanner;
  
  public class TicTacToe {
  
  // These two variables are for placing the X's and O's in the TicTacToe
  // table.
  static int row;
  static int col;
  
  // This array is for the TicTacToe table.
  static char[][] table = new char[3][3];
  
  // This is for ending the while statement that controls the game
  static boolean continuePlaying = true;
  static boolean quitGame = false;
  
  // These will store the names for player 1 and 2
  static String p1;
  static String p2;
  
  // This variable is to count the number of games played
  static int gamesCounter = 0;
  
  // This variable is to count the number of moves
  static int moveCounter = 0;
  
  // These two variables are to keep track of the wins each player has
  static int p1Wins = 0;
  static int p2Wins = 0;
  
  static void clearTable() {
      for (int i = 0; i &lt; table.length; i++) {
          table[0][i] = ' ';
          table[1][i] = ' ';
          table[2][i] = ' ';
  
      }
  }
  
  // This method will determine if the game is a tie.
  static boolean checkTie() {
      for (int i = 0; i &lt; table.length; i++) {
          for (int j = 0; j &lt; table[i].length; j++) {
              if (table[i][j] == ' ') {
                  return false;
              }
          }
      }
      return true;
  }
  
  // This is my displayTable() method. This will show the table and the X's or
  // O's each player has played
  static void displayTable() {
      System.out.println("  0  1  2");
      System.out.println("0[" + table[0][0] + "][" + table[0][1] + "]["
              + table[0][2] + "]");
      System.out.println("1[" + table[1][0] + "][" + table[1][1] + "]["
              + table[1][2] + "]");
      System.out.println("2[" + table[2][0] + "][" + table[2][1] + "]["
              + table[2][2] + "]");
  }
  
  // This is my move(int row,int col) method. This will record the moves each
  // player takes and insert X's or O's depending on which player
  static boolean move(int row, int col) {
      // This if statement will return false if the user enters in coordinates
      // outside the 3x3 zone.
      if (row &gt; 2 || row &lt; 0) {
          System.out.println("Invalid move.");
          return false;
      }
      // This if statement checks if the array already has an X or O in the
      // chosen space. If the array is already filled it will return false.
      else if (table[row][col] == 'X' || table[row][col] == 'O') {
          System.out.println("Not available.");
          return false;
      } else
          return true;
  }
  
  // This is my checkRow method. It checks for 3 X's or O's in a row. If there
  // are 3 in a row it will return true, if not, it returns false.
  static boolean checkRow(int row) {
      if ((table[row][0] &amp; table[row][1] &amp; table[row][2]) == 'X')
          return true;
      if ((table[row][0] &amp; table[row][1] &amp; table[row][2]) == 'O')
          return true;
      else
          return false;
  }
  
  // This is my checkCol method. It checks for 3 X's or O's in a row. If there
  // are 3 in a row it will return true, if not, it returns false.
  static boolean checkCol(int col) {
      if ((table[0][col] &amp; table[1][col] &amp; table[2][col]) == 'X')
          return true;
      if ((table[0][col] &amp; table[1][col] &amp; table[2][col]) == 'O')
          return true;
      else
          return false;
  }
  
  // This is my checkDiagonal method. It checks for 3 X's or O's in a row. If
  // there are 3 in a row it will return true, if not, it returns false.
  static boolean checkDiagonal() {
      if ((table[0][0] &amp; table[1][1] &amp; table[2][2]) == 'X')
          return true;
      if ((table[2][0] &amp; table[1][1] &amp; table[0][2]) == 'X')
          return true;
      if ((table[0][0] &amp; table[1][1] &amp; table[2][2]) == 'O')
          return true;
      if ((table[2][0] &amp; table[1][1] &amp; table[0][2]) == 'O')
          return true;
      else
          return false;
  }
  
  // This is my checkWinner method. It runs all the other checks to see if
  // anyone won.
  // If there is a winner the method returns true. If there is no winner yet,
  // the method returns false.
  static boolean checkWinner() {
      if (checkRow(0) == true)
          return true;
      if (checkRow(1) == true)
          return true;
      if (checkRow(2) == true)
          return true;
      if (checkCol(0) == true)
          return true;
      if (checkCol(1) == true)
          return true;
      if (checkCol(2) == true)
          return true;
      if (checkDiagonal() == true)
          return true;
      else
          return false;
  }
  
  public static void main(String[] args) {
      // The Scanner for asking each player's names
      Scanner s = new Scanner(System.in);
  
      // The beginning structure of the TicTacToe program
      System.out.println("TicTextToe");
      System.out.print("Name of player 1: ");
      p1 = s.nextLine();
  
      // Asks for Player 2's name
      System.out.print("Name of player 2: ");
      p2 = s.nextLine();
  
      do {
  
          // The TicTacToe table set up, coordinates provided around the
          // squares
          // The displayTable() method will be used to display the table here.
          while (continuePlaying == true) {
              displayTable();
              System.out.print("Player " + p1 + ":");
              row = s.nextInt();
              col = s.nextInt();
              move(row, col);
  
              // This will display the table again and ask for proper
              // coordinates.
              while (move(row, col) == false) {
                  displayTable();
                  System.out.println("Player " + p1 + ":");
                  row = s.nextInt();
                  col = s.nextInt();
                  move(row, col);
              }
  
              // This inputs the X into the table if move(row, col) returns
              // true.
              if (move(row, col) == true) {
                  moveCounter++;
                  table[row][col] = 'X';
              }
  
              // This will check if p1 just won the game or if the game needs
              // to
              // continue
              checkRow(0);
              // System.out.println(checkRow(0)); //This prints out if row 0
              // is
              // true or false
              checkRow(1);
              // System.out.println(checkRow(1)); //This prints out if row 1
              // is
              // true or false
              checkRow(2);
              // System.out.println(checkRow(2)); //This prints out if row 2
              // is
              // true or false
              checkCol(0);
              // System.out.println(checkCol(0)); //This prints out if column
              // 0 is
              // true or false
              checkCol(1);
              // System.out.println(checkCol(1)); //This prints out if column
              // 1 is
              // true or false
              checkCol(2);
              // System.out.println(checkCol(2)); //This prints out if column
              // 2 is
              // true or false
              checkDiagonal();
              // System.out.println(checkDiagonal()); //This prints out true
              // or
              // false depending on the diagonals
              checkWinner();
              // System.out.println(checkWinner()); //This prints out if
              // checkWinner is true or false. If it's true the while loop
              // should
              // end
  
              // This will check if there is a tie
              // checkTie();
              if (moveCounter == 9) {
                  displayTable();
                  System.out.println("It's a tie!");
                  gamesCounter++;
                  clearTable();
                  moveCounter = 0;
                  System.out.println("Another Game? Yes/No :");
                  String answer = s.next();
                  if (answer.equals("Yes")) {
                      break;
                  }
                  if (answer.equals("No")) {
                      continuePlaying = false;
                      clearTable();
                      System.out.println("Statistics:");
                      System.out.println(p1 + p1Wins + "/" + gamesCounter);
                      System.out.println(p2 + p2Wins + "/" + gamesCounter);
                      quitGame = false;
                      break;
                  }
              }
  
              if (checkWinner() == true) {
                  displayTable();
                  System.out.println("Player " + p1 + " wins!");
                  gamesCounter++;
                  p1Wins++;
                  clearTable();
                  moveCounter = 0;
                  System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
                  System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
                  System.out.println("Another game? Yes/No :");
                  String answer = s.next();
                  if (answer.equals("Yes")) {
                      break;
                  } else if (answer.equals("No")) {
                      continuePlaying = false;
                      System.out.println("Statistics:");
                      System.out.println(p1 + p1Wins + "/" + gamesCounter);
                      System.out.println(p2 + p2Wins + "/" + gamesCounter);
                      quitGame = false;
                      break;
                  }
              }
  
              displayTable();
              System.out.print("Player " + p2 + ":");
              row = s.nextInt();
              col = s.nextInt();
              move(row, col);
  
              // This will display the table again and ask for proper
              // coordinates.
              while (move(row, col) == false) {
                  displayTable();
                  System.out.println("Player " + p2 + ":");
                  row = s.nextInt();
                  col = s.nextInt();
                  move(row, col);
              }
  
              // This inputs the O into the table if move(row, col) returns
              // true.
              if (move(row, col) == true) {
                  moveCounter++;
                  table[row][col] = 'O';
              }
  
              // This will check if p2 just won the game or if the game needs
              // to
              // continue
              // checkRow(0);
              // System.out.println(checkRow(0)); //This prints out if row 0
              // is
              // true or false
              checkRow(1);
              // System.out.println(checkRow(1)); //This prints out if row 1
              // is
              // true or false
              checkRow(2);
              // System.out.println(checkRow(2)); //This prints out if row 2
              // is
              // true or false
              checkCol(0);
              // System.out.println(checkCol(0)); //This prints out if column
              // 0 is
              // true or false
              checkCol(1);
              // System.out.println(checkCol(1)); //This prints out if column
              // 1 is
              // true or false
              checkCol(2);
              // System.out.println(checkCol(2)); //This prints out if column
              // 2 is
              // true or false
              checkDiagonal();
              // System.out.println(checkDiagonal()); //This prints out true
              // or
              // false depending on the diagonals
              checkWinner();
              // System.out.println(checkWinner()); //This prints out if
              // checkWinner is true or false. If it's true the while loop
              // should
              // end
  
              // This will check if there is a tie
              // checkTie();
              if (moveCounter == 9) {
                  displayTable();
                  System.out.println("It's a tie!");
                  gamesCounter++;
                  clearTable();
                  moveCounter = 0;
                  System.out.println("Another Game? Yes/No :");
                  String answer = s.next();
                  if (answer.equals("Yes")) {
                      break;
                  }
                  if (answer.equals("No")) {
                      continuePlaying = false;
                      clearTable();
                      System.out.println("Statistics:");
                      System.out.println(p1 + p1Wins + "/" + gamesCounter);
                      System.out.println(p2 + p2Wins + "/" + gamesCounter);
                      quitGame = false;
                      break;
                  }
              }
  
              if (checkWinner() == true) {
                  displayTable();
                  System.out.println("Player " + p2 + " wins!");
                  gamesCounter++;
                  p2Wins++;
                  clearTable();
                  System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
                  System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
                  System.out.println("Another game? Yes/No :");
                  String answer = s.next();
                  if (answer.equals("Yes")) {
                      break;
                  }
                  if (answer.equals("No")) {
                      continuePlaying = false;
                      clearTable();
                      System.out.println("Statistics:");
                      System.out.println(p1 + p1Wins + "/" + gamesCounter);
                      System.out.println(p2 + p2Wins + "/" + gamesCounter);
                      quitGame = true;
                      break;
                  }
  
              }
  
          }
  
      } while (quitGame = false);
  }
  }
  </code></pre>