Olá, pessoal, tudo bem?
Então estou com uma dúvida tenho uma trabalho para fazer um jogo da velha usando array multidimensional então conseguir preencher todos os arrays e até fazer a checagem tipo se preencher 3 na mesma linha iguais então vc ganhou o jogo, mais meu problema é o seguinte, em algumas situações mesmo eu preenchendo os 3 campos com “x” em uma determinada linha (nisso ele entra com uma condicional “if” para checar se a linha que você digitou e a coluna é aquela) mas o programa entra num “if” que não era pra entrar, e através do “Debug” eu consigo ver isso e N/AO SEI PORQUE, eu acho q minha lógica está correta, MAIS SOU INICIANTE ENTÃO PODE ESTAR ERRADA OU SEI LÁ, vou colocar a parte que ta dando esse “conflito” caso precise eu posto o código inteiro pra vcs.
É difícil saber qual o problema postando apenas o código, diga também com quais valores está entrando em conflito e o que está sendo impresso com aqueles valores.
Então eu consegui resolver, adicionando mais uma condicional “if” e tirando os “else if” deixando apenas os “if” vou postar o código inteiro pra vc ver, mais eu consegui fazer funcionar, mais acho q poderia deixar ele bem mais limpo, mais ae eu não sei como.
package aula20;
import java.util.Scanner;
public class JogoDaVelha {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("--------------Jogo da Velha--------------");
String[][] tabuleiro = new String[4][4];
boolean check = false;
boolean checkDentroFor1 = false;
boolean checkNum3 = false;
int cont = 0;
System.out.println("Digite seu nome 1º jogador");
String jogador1 = scan.next();
String X = "X";
int posX = 0;
int posY = 0;
int formulaPosX = 0;
int formulaPosY = 0;
int contX0 = 0;
int contX1 = 0;
int contX2 = 0;
int contXY0 = 0;
int contXY1 = 0;
int contXY2 = 0;
int conDiagX = 0;
int conDiagX2 = 0;
System.out.println("Digite seu nome 2º jogador");
String jogador2 = scan.next();
String O = "O";
int posX2 = 0;
int posY2 = 0;
int formulaPosX2 = 0;
int formulaPosY2 = 0;
int contO0 = 0;
int contO1 = 0;
int contO2 = 0;
int contOY0 = 0;
int contOY1 = 0;
int contOY2 = 0;
int conDiagO = 0;
int conDiagO2 = 0;
do {
//check = false;
while (checkDentroFor1 == false) {
System.out.println(jogador1 + " - Jogador - X");
while (checkNum3 == false){
System.out.println("Entre com a POSX");
posX =Integer.parseInt(scan.next());
System.out.println("Entre com a POSY");
posY = Integer.parseInt(scan.next());
if (posX < 3 && posY < 3) {
checkNum3 = true;
} else {
System.out.println("Posição errada tente novamente!");
}
}
checkNum3 = false;
formulaPosX = tabuleiro.length - (posX + 1);
formulaPosY = tabuleiro[0].length - (posY + 1);
for (int i = posX; i<(tabuleiro.length - formulaPosX); i++) {
for (int j = posY; j<(tabuleiro[i].length - formulaPosY); j++) {
if (posX == i && posY == j) {
if (tabuleiro[i][j] == null) {
tabuleiro[i][j] = "X";
System.out.println();
System.out.println(jogador1 + " - Jogador - X linha " + i + " coluna " + j);
System.out.println();
//Linha
if (tabuleiro[0][j] != null && tabuleiro[0][j].equals("X")) {
if (posX == 0) {
contX0++;
//Diagonal
if (tabuleiro[0][0] != null) {
if (posY == 0) {
conDiagX2++;
if (conDiagX2 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
}
}
//Diagonal
if (tabuleiro[0][2] != null) {
if (posY == 2) {
conDiagX++;
if (conDiagX == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
}
}
//---------------------------------//
if (contX0 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[1][j] != null && tabuleiro[1][j].equals("X")) {
if (posX == 1) {
contX1++;
//Diagonal
if (tabuleiro[1][1] != null) {
if (posY == 1) {
conDiagX++;
conDiagX2++;
if (conDiagX == 3 || conDiagX2 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
}
}
//---------------------------------//
if (contX1 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[2][j] != null && tabuleiro[2][j].equals("X")) {
if (posX == 2) {
contX2++;
//Diagonal
if (tabuleiro[2][2] != null) {
if (posY == 2) {
conDiagX2++;
if (conDiagX2 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
}
}
if (tabuleiro[2][0] != null) {
if (posY == 0) {
conDiagX++;
if (conDiagX == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
}
}
//--------------------------------
if (contX2 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
//Coluna
} if (tabuleiro[i][0] != null && tabuleiro[i][0].equals("X")) {
if (posY == 0) {
contXY0++;
if (contXY0 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[i][1] != null && tabuleiro[i][1].equals("X")) {
if (posY == 1) {
contXY1++;
if (contXY1 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[i][2] != null && tabuleiro[i][2].equals("X")) {
if (posY == 2) {
contXY2++;
if (contXY2 == 3) {
System.out.println(jogador1 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
}
checkDentroFor1 = true;
} else {
System.out.println("Campo já preenchido tente de novo");
}
} else {
}
}
}
}
cont += 1;
checkDentroFor1 = false;
if (cont < 9 && check == false) {
while (checkDentroFor1 == false) {
System.out.println(jogador2 + " - Jogador - O");
while (checkNum3 == false){
System.out.println("Entre com a POSX2");
posX2 = Integer.parseInt(scan.next());
System.out.println("Entre com a POSY2");
posY2 = Integer.parseInt(scan.next());
if (posX2 < 3 && posY2 < 3) {
checkNum3 = true;
} else {
System.out.println("Posição errada tente novamente!");
}
}
checkNum3 = false;
formulaPosX2 = tabuleiro.length - (posX2 + 1);
formulaPosY2 = tabuleiro[0].length - (posY2 + 1);
for (int i = posX2; i<(tabuleiro.length - formulaPosX2); i++) {
for (int j = posY2; j<(tabuleiro[i].length - formulaPosY2); j++) {
if (posX2 == i && posY2 == j) {
if (tabuleiro[i][j] == null) {
tabuleiro[i][j] = "O";
System.out.println();
System.out.println(jogador2 + " - Jogador - O linha " + i + " coluna " + j);
System.out.println();
//Linha
if (tabuleiro[0][j] != null && tabuleiro[0][j].equals("O")) {
if (posX2 == 0) {
contOY0++;
//Diagonal
if (tabuleiro[0][0] != null) {
if (posY2 == 0) {
conDiagO2++;
if (conDiagO2 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
}
}
//Diagonal
if (tabuleiro[0][2] != null) {
if (posY2 == 2) {
conDiagO++;
if (conDiagO == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
}
}
//---------------------------------//
if (contOY0 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
}if (tabuleiro[1][j] != null && tabuleiro[1][j].equals("O")) {
if (posX2 == 1) {
contOY1++;
//Diagonal
if (tabuleiro[1][1] != null) {
if (posY2 == 1) {
conDiagO++;
conDiagO2++;
if (conDiagO == 3 || conDiagO2 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
}
}
//---------------------------------//
if (contOY1 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[2][j] != null && tabuleiro[2][j].equals("O")) {
if (posX2 == 2) {
contOY2++;
//Diagonal
if (tabuleiro[2][0] != null) {
if (posY2 == 0) {
conDiagO++;
if (conDiagO == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
}
}
//Diagonal
if (tabuleiro[2][2] != null) {
if (posY2 == 2) {
conDiagO2++;
if (conDiagO2 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
}
}
//---------------------------------//
if (contOY2 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
//Coluna
} if (tabuleiro[i][0] != null && tabuleiro[i][0].equals("O")) {
if (posY2 == 0) {
contO0++;
if (contO0 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[i][1] != null && tabuleiro[i][1].equals("O")) {
if (posY2 == 1) {
contO1++;
if (contO1 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
} if (tabuleiro[i][2] != null && tabuleiro[i][2].equals("O")) {
if (posY2 == 2) {
contO2++;
if (contO2 == 3) {
System.out.println(jogador2 + " você ganhou!");
check = true;
}
checkDentroFor1 = true;
}
}
checkDentroFor1 = true;
} else {
System.out.println("Campo já preenchido tente de novo");
}
} else {
}
}
}
}
}
cont += 1;
checkDentroFor1 = false;
} while (cont < 9 && check == false );
for (int i = 0; i<tabuleiro.length; i++) {
for (int j = 0; j<tabuleiro[i].length; j++) {
if (tabuleiro[i][j] != null) {
System.out.println("tabuleiro[" + i + "][" + j + "] = " + tabuleiro[i][j]);
}
}
}
}
Tente separar alguns trechos do código em métodos:
public static int[] leiaPosicao(Scanner scan, String nome) {
boolean check = false;
int x = -1;
int y = -1;
while (check == false) {
System.out.println(nome + ", entre com a x");
x = Integer.parseInt(scan.next());
System.out.println(nome + ", entre com a y");
y = Integer.parseInt(scan.next());
if (x < 3 && y < 3) {
check = true;
} else {
System.out.println("Posição errada tente novamente!");
}
}
int[] posicao= new int[2];
posicao[0] = x;
posicao[1] = y;
return posicao;
}