Страницы

Поиск по вопросам

вторник, 7 мая 2019 г.

Крестики нолики

Пытаюсь реализовать своими силами игру крестики-нолики на 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 из цикла.

Комментариев нет:

Отправить комментарий