Пытаюсь реализовать своими силами игру крестики-нолики на Java. Все вроде работает так как задумывалось, но продолжение игры вообще не идет.
Суть в том что метод Exit() зацикливается. при вводе "n" все работает хорошо, а при вводе "Y" Спрашивает по новой.
Подскажите,пожалуйста, в чем ошибка.
package tic_tac_toe;
import java.util.Scanner;
public class XO {
public static void Game(){
Scanner in = new Scanner(System.in); // Подключение класса считывания инф-и (аля Read)
String hole; // переменная местоположения
String[][] field = new String[3][3];
// Заполняем массив пробелами, для последущего замещения их Х или О
for (int i = 0; i < 3; i++){
System.out.println();
for (int j = 0; j < 3; j++){
field[i][j] = (" [ ] ");
System.out.print(field[i][j]);
}
}
int i = 2;
int quit=0;
while((i<11) & (quit == 0)){
if (i % 2 == 0){
System.out.println("
Ходит Х");
}
else{
System.out.println("
Ходит О");
}
System.out.print("Введите клетку:> ");
// Считывание ввода, и ход.
switch (hole = in.next()){
case "7":{
if (field[0][0] == (" [ ] ")){
if (i % 2 == 0){
field[0][0] = (" [X] ");
i++;
break;
}
else {
field[0][0] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "8":{
if (field[0][1] == (" [ ] ")){
if (i % 2 == 0){
field[0][1] = (" [X] ");
i++; break;
}
else {
field[0][1] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "9":{
if (field[0][2] == (" [ ] ")){
if (i % 2 == 0){
field[0][2] = (" [X] ");
i++; break;
}
else {
field[0][2] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "4":{
if (field[1][0] == (" [ ] ")){
if (i % 2 == 0){
field[1][0] = (" [X] ");
i++; break;
}
else {
field[1][0] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "5":{
if (field[1][1] == (" [ ] ")){
if (i % 2 == 0){
field[1][1] = (" [X] ");
i++; break;
}
else {
field[1][1] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "6":{
if (field[1][2] == (" [ ] ")){
if (i % 2 == 0){
field[1][2] = (" [X] ");
i++; break;
}
else {
field[1][2] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "1":{
if (field[2][0] == (" [ ] ")){
if (i % 2 == 0){
field[2][0] = (" [X] ");
i++; break;
}
else {
field[2][0] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "2":{
if (field[2][1] == (" [ ] ")){
if (i % 2 == 0){
field[2][1] = (" [X] ");
i++; break;
}
else {
field[2][1] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
case "3":{
if (field[2][2] == (" [ ] ")){
if (i % 2 == 0){
field[2][2] = (" [X] ");
i++; break;
}
else {
field[2][2] = (" [O] ");
i++; break;
}
}
else{
System.out.println("Эта клетка занята, введите другую."); break;
}
}
default:
System.out.println("
Ошибка ведите еще раз!");
break;
}
// Вывод поля на экран
for (int p = 0; p < 3; p++){
System.out.println();
for (int l = 0; l < 3; l++){
System.out.print(field[p][l]);
}
}
for (int t = 0; t<3 ; t++){
// Проверка прямых
if (((field[t][0]) == " [O] " & (field[t][1]) == " [O] " & field[t][2] == " [O] ") ||
((field[0][t]) == " [O] " & (field[1][t]) == " [O] " & field[2][t] == " [O] ")) {
System.out.print("
Победил О ");
quit++; Exit();
}
else if (((field[t][0]) == " [X] " & (field[t][1]) == " [X] " & field[t][2] == " [X] ") ||
((field[0][t]) == " [X] " & (field[1][t]) == " [X] " & field[2][t] == " [X] ")) {
System.out.print("
Победил Х ");
quit++; Exit();
}
else {}
}
// Проверка диагоналей
if (((field[0][0]) == " [X] " & (field[1][1]) == " [X] " & field[2][2] == " [X] ") ||
((field[0][2]) == " [X] " & (field[1][1]) == " [X] " & field[2][0] == " [X] ")) {
System.out.print("
Победил Х ");
quit++; Exit();
}
else if (((field[0][0]) == " [O] " & (field[1][1]) == " [O] " & field[2][2] == " [O] ") ||
((field[0][2]) == " [O] " & (field[1][1]) == " [O] " & field[2][0] == " [O] ")) {
System.out.print("
Победил О ");
quit++; Exit();
}
else {}
}
System.out.println();
}
public static void Exit(){ // Отсутствует продолжение игры
Scanner ex = new Scanner(System.in);
String re;
do {
System.out.print("Хотите продолжить игру? ");
re = ex.next();
if (re == "Y"){
Game();
}
else if(re == "n") {
break;
}
} while (re == ("Y") || re == "n");
}
public static void main(String[] args) {
Game();
//Exit();
}
}
Ответ
Строки сравнивают методом equals(String str)
То есть у Вас должно быть:
do {
System.out.print("Хотите продолжить игру? ");
re = ex.next();
if (re.equals("Y")) {
Game();
}
else if (re.equals("N")) {
break;
}
} while (re.equals("N") || re.equals("Y"));
А при вводе "n" поток выходит из цикла лишь потому, что Вы воспользовались досрочным выходом break из цикла.
Комментариев нет:
Отправить комментарий