2015-08-11 26 views
-4

Итак, когда я ввожутся в уже сделанные координаты, он должен придумать ошибку, в которой говорится, что она уже выполнена, а затем запросить новую координату, но она просто выходит из цикла, даже если она действительна установите значение true.Неправильно работает цикл while

do { 
     if (board[coor][coor2] == ' ') { 
      board[coor][coor2] = 'X'; 
      valid = true; 
     } else { 
      System.out.println("Coordinate already entered!"); 
      System.out.println("X please put in the X coordinate:"); 
      coor = keyboard.nextInt(); 
      System.out.println("X please put in the Y coordinate:"); 
      coor2 = keyboard.nextInt(); 
     } 
    } while (valid = false); 

Вот мой полный код.

package tictactoe; 

import java.util.Scanner; 

public class TicTacToe { 

private static char[][] board = new char[3][3]; 

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    int coor = 0; 
    int coor2 = 0; 
    boolean valid = false; 

    initBoard(); 
    displayBoard(); 
    for (int l = 0; l < 9; l++) { 
     System.out.println("X please put in the X coordinate:"); 
     coor = keyboard.nextInt(); 
     System.out.println("X please put in the Y coordinate:"); 
     coor2 = keyboard.nextInt(); 
     valid = false; 
     do { 
      if (board[coor][coor2] == ' ') { 
       board[coor][coor2] = 'X'; 
       valid = true; 
      } else { 
       System.out.println("Coordinate already entered!"); 
       System.out.println("X please put in the X coordinate:"); 
       coor = keyboard.nextInt(); 
       System.out.println("X please put in the Y coordinate:"); 
       coor2 = keyboard.nextInt(); 
      } 
     } while (valid = false); 
     displayBoard(); 
     System.out.println("O please put in the X coordinate:"); 
     coor = keyboard.nextInt(); 
     System.out.println("O please put in the Y coordinate:"); 
     coor2 = keyboard.nextInt(); 
     valid = false; 
     do { 
      if (board[coor][coor2] == ' ') { 
       board[coor][coor2] = 'O'; 
       valid = true; 
      } else { 

       System.out.println("Coordinate already entered!"); 
       System.out.println("O please put in the X coordinate:"); 
       coor = keyboard.nextInt(); 
       System.out.println("O please put in the Y coordinate:"); 
       coor2 = keyboard.nextInt(); 
      } 
     } while (valid = false); 
     displayBoard(); 
    } 
    displayBoard(); 

} 

public static void initBoard() { 
    // fills up the board with blanks 
    for (int r = 0; r < 3; r++) { 
     for (int c = 0; c < 3; c++) { 
      board[r][c] = ' '; 
     } 
    } 
} 

public static void displayBoard() { 
    System.out.println(" 0 " + board[0][0] + "|" + board[0][1] + "|" + board[0][2]); 
    System.out.println(" --+-+--"); 
    System.out.println(" 1 " + board[1][0] + "|" + board[1][1] + "|" + board[1][2]); 
    System.out.println(" --+-+--"); 
    System.out.println(" 2 " + board[2][0] + "|" + board[2][1] + "|" + board[2][2]); 
    System.out.println("  0 1 2 "); 
} 

}

+0

Вы уже знаете, как сравнивать значения (вы сделали это здесь 'board [coor] [coor2] == '''). Так почему вы написали 'while (valid = false)'? – Tom

+0

Прежде чем усомниться в поведении 'do..while loop', я скорее сомневаюсь в моей реализации owm. Вы сравниваете значения с '=='. Единственный '=' - это выбор, даже в comperissons – SomeJavaGuy

+0

В будущем я рекомендую использовать символ '!', Чтобы избежать глупого нежелательного поведения, такого как это. –

ответ

1

использование while(valid == false).

= одиночный - это назначение, а не сравнение.

Смежные вопросы