#java
Пытаюсь реализовать своими силами игру крестики-нолики на 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("\nХодит Х");
}
else{
System.out.println("\nХодит О");
}
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("\nОшибка ведите еще раз!");
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("\nПобедил О ");
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("\nПобедил Х ");
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("\nПобедил Х ");
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("\nПобедил О ");
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();
}
}
Ответы
Ответ 1
Строки сравнивают методом 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 из цикла.Ответ 2
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { char[][] field = new char[3][3]; Scanner scanner = new Scanner(System.in); while (true) { System.out.print("Крестики, введите номер клетки по горизонтали, начиная с 0: "); int a = scanner.nextInt(); System.out.print("Крестики, по вертикали: "); int b = scanner.nextInt(); field[a][b] = 'x'; for (int i = 0; i<3; i++){ for (int j = 0; j<3; j++){ System.out.print(field[i][j]+" | "); } System.out.println(); } System.out.print("Нолики, введите номер клетки по горизонтали, начиная с 0: "); int c = scanner.nextInt(); System.out.print("Нолики, по вертикали: "); int d = scanner.nextInt(); field[c][d] = '0'; for (int i = 0; i<3; i++){ for (int j = 0; j<3; j++){ System.out.print(field[i][j]+" | "); } System.out.println(); } if (field[0][0] == field[0][1]&& field[0][1] == field[0][2]&&field[0][2]=='x'||field[0][2]=='y'){ System.out.println("Победили "+field[0][2]); break; } else if (field[0][0] == field[1][0]&& field[1][0] == field[2][0]&&field[2][0]=='x'||field[2][0]=='y'){ System.out.println("Победили "+field[0][0]); break; } else if (field[0][1] == field[1][1]&& field[1][1] == field[2][1]&&field[2][1]=='x'||field[2][1]=='y'){ System.out.println("Победили "+field[0][1]); break; } else if (field[2][0] == field[2][1]&& field[2][1] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[2][0]); break; } else if (field[0][2] == field[1][2]&& field[1][2] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[0][2]); break; } else if (field[0][0] == field[1][1]&& field[1][1] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[0][0]); break; } else if (field[1][0] == field[1][1]&& field[1][1] == field[2][2]&&field[2][2]=='x'||field[2][2]=='y'){ System.out.println("Победили "+field[1][0]); break; } else if (field[0][2] == field[1][1]&& field[1][1] == field[2][0]&&field[0][2]=='x'||field[0][2]=='y'){ System.out.println("Победили "+field[0][2]); break; } } } } По сути тот же код, но просто хочу его показать, ибо это первый более-менее серьёзный "проект" :), хотя еще сырой довольно.Ответ 3
Просто добавте break после: if (re == "Y") { Game();
Комментариев нет:
Отправить комментарий