@Sydora

Почему при отлавливании исключения программа уходит в бесконечный цикл?

При отлавливании исключения InputMismatchException( при проверке на ввод букв) программа уходит в бесконечный цикл. При проверке же на выход за пределы массива программа работает корректно. Почему так происходит? Заранее спасибо.

import java.util.*;

public class Main
{
public static void main(String[] args)
{
String matrix[][] = new String [3][3];
int i = 0, j = 0;
boolean win = false;
char playerTurn = 'X';
int count = 0;
Scanner input = new Scanner(System.in);
for (i = 0; i < matrix.length; i++)
{
for (j = 0; j < matrix.length; j++)
{
matrix[i][j] = "-";
}
}

while (win == false){
/**
Проверка победы первого игрока
*/
if (matrix[0][0] == "X" && matrix[0][1] == "X" && matrix[0][2] == "X"
|| matrix[1][0] == "X" && matrix[1][1] == "X" && matrix[1][2] == "X"
|| matrix[2][0] == "X" && matrix[2][1] == "X" && matrix[2][2] == "X"
|| matrix[0][0] == "X" && matrix[1][0] == "X" && matrix[2][0] == "X"
|| matrix[0][1] == "X" && matrix[1][1] == "X" && matrix[2][1] == "X"
|| matrix[0][2] == "X" && matrix[1][2] == "X" && matrix[2][2] == "X"
|| matrix[0][0] == "X" && matrix[1][1] == "X" && matrix[2][2] == "X"
|| matrix[0][2] == "X" && matrix[1][1] == "X" && matrix[2][0] == "X"){
win = true;
for (i = 0; i < matrix.length; i++){
for (j = 0; j < matrix.length; j++){
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
System.out.println();
}
System.out.println();
System.out.println("\t\tFirst player win!");
break;
}
/**
Проверка победы второго игрока
*/
if (matrix[0][0] == "0" && matrix[0][1] == "0" && matrix[0][2] == "0"
|| matrix[1][0] == "0" && matrix[1][1] == "0" && matrix[1][2] == "0"
|| matrix[2][0] == "0" && matrix[2][1] == "0" && matrix[2][2] == "0"
|| matrix[0][0] == "0" && matrix[1][0] == "0" && matrix[2][0] == "0"
|| matrix[0][1] == "0" && matrix[1][1] == "0" && matrix[2][1] == "0"
|| matrix[0][2] == "0" && matrix[1][2] == "0" && matrix[2][2] == "0"
|| matrix[0][0] == "0" && matrix[1][1] == "0" && matrix[2][2] == "0"
|| matrix[0][2] == "0" && matrix[1][1] == "0" && matrix[2][0] == "0"){
win = true;
for (i = 0; i < matrix.length; i++){
for (j = 0; j < matrix.length; j++){
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
System.out.println();
}
System.out.println();
System.out.println("\t\tSecond player win!");
break;
}
/**
Проверка ничьи
*/
if(count == 9){
win = true;
for (i = 0; i < matrix.length; i++){
for (j = 0; j < matrix.length; j++){
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
System.out.println();
}
System.out.println();
System.out.println("\t\tDraw!");
break;
}

for (i = 0; i < matrix.length; i++){
for (j = 0; j < matrix.length; j++){
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
System.out.println();
}
System.out.println();
try{
System.out.print("Horisontal (from 0 to 2): ");
int horisontal = input.nextInt();
System.out.print("Vertical (from 0 to 2): ");
int vertical = input.nextInt();
if (String.valueOf(horisontal) == "Exit" || String.valueOf(vertical) == "Exit") {
break;
}
if (matrix[horisontal][vertical] == "-"){
if (playerTurn == 'X'){
playerTurn = '0';
matrix[horisontal][vertical] = "X";
count++;
}
else{
playerTurn = 'X';
matrix[horisontal][vertical] = "0";
count++;
}
}
else
System.out.println("\t\tTry some empty cell");
}catch(InputMismatchException e){
System.out.println("\t\tEntered invalid data");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("\t\tEntered invalid value");
}
}
}
}
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@tplus
Сложно читать всю простыню, но, скорее всего, после отлавливания исключения
while (win == false){...}
продолжает работать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы