-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 ");
}
}
Вы уже знаете, как сравнивать значения (вы сделали это здесь 'board [coor] [coor2] == '''). Так почему вы написали 'while (valid = false)'? – Tom
Прежде чем усомниться в поведении 'do..while loop', я скорее сомневаюсь в моей реализации owm. Вы сравниваете значения с '=='. Единственный '=' - это выбор, даже в comperissons – SomeJavaGuy
В будущем я рекомендую использовать символ '!', Чтобы избежать глупого нежелательного поведения, такого как это. –