[RESOLVIDO] Jogo da velha em java

Olá, boa noite a quem puder ver.

Sou novo aqui e não sei exatamente como as coisas funcionam, mas, pelo pouco que vi, parecem-me sérios e competentes.

Lamento postar uma coisa que já foi postada por outros users, mas, estou iniciando em java e estou tentando elaborar o famoso exercício do jogo da velha mas, com o pouco conhecimento que tenho, não consigo encontrar o erro em meu código.

Não estou pedindo para fazerem um exercício. Estou querendo aprender com meus erros e fazer o meu código funcionar, dados os meus conhecimentos atuais.

Se alguém puder me dar uma “luz”, eu seria muito agradecido.

Segue abaixo o código que tentei:

package Velha;

import java.util.Scanner;

public class Test_2 {

private static Scanner leia;

public static void main(String[] args) {
	
	leia = new Scanner(System.in);
	String a[][] = new String[3][3];
	int i=0, j=0, l=0, c=0;				
	char x = 'X', o = 'O';
	int cont;

	System.out.println("####################################################");
	System.out.println("      Seja bem vindo ao jogo da velha ");
	System.out.println("####################################################");

	System.out.println("\nLembrete: Os valores das linhas e colunas começam em 0 e terminam em 2");
	
	
	for (i=0; i<3; i++) {
		for (j=0; j<3; j++)
			a[i][j] = "-";
   
  
	for (cont = 0; cont < 9; cont ++) {

		System.out.print("\nDigite a linha do primeiro jogador: ");
		l = leia.nextInt();
		
		while(i<0 || i>2){
	        System.out.print("\nÍndice da linha inválido\nX (Linha): ");
	        l = leia.nextInt();
	    }
		System.out.print("Digite a coluna do primeiro jogador: ");
		c = leia.nextInt();
		
		while(j<0 || j>2){
	        System.out.print("\nÍndice da coluna inválido\nY (Coluna): ");
	         c = leia.nextInt();
		}
		System.out.println();
		
		  
			
		a[l][c] = "x";   
		System.out.println("   " + " 0" + "  1"+ "  2") ;
		System.out.println("0   " + a[0][0] + "  " + a[0][1] + " " + a[0][2] );
		System.out.println("1   " + a[1][0] + "  " + a[1][1] + " " + a[1][2] ); 
		System.out.println("2   " + a[2][0] + "  " + a[2][1] + " " + a[2][2] );
		
		if (cont >= 5)
		{
			if ((a[0][0] == a[0][1] && a[0][0] == a[0][2])||
			    (a[1][0] == a[1][1] && a[1][0] == a[1][2])||
			    (a[2][0] == a[2][1] && a[2][0] == a[2][2])||
			    (a[0][0] == a[1][0] && a[0][0] == a[2][0])||
			    (a[0][1] == a[1][1] && a[0][1] == a[2][1])||
			    (a[0][2] == a[1][2] && a[0][2] == a[2][2])|| 
			    (a[2][2] == a[0][0] && a[2][2] == a[1][1])||
			    (a[0][2] == a[1][1] && a[1][1] == a[2][0])) 
				
				
			{
				if (a[0][0] == "x") 
				{
					System.out.println("\n\nJogador 1 venceu!!!");
					break;
				}
			} 																						
			} 																			
		
		
	
		
		System.out.print("\nDigite a linha do segundo jogador: ");
		l = leia.nextInt();
		
		while(i<0 || i>2){
	        System.out.print("\nÍndice da linha inválido\nX (Linha): ");
	        l = leia.nextInt();
	    }
		
	    System.out.print("Digite a coluna do segundo jogador: ");
		c = leia.nextInt();
		
		while(j<0 || j>2){
	        System.out.print("\nÍndice da coluna inválido\nY (Coluna): ");
	         c = leia.nextInt();
		}
		
		System.out.println();

		cont++;
		a[l][c] = "o";
	
		System.out.println("   " + " 0" + "  1"+ "  2");
		System.out.println("0   " + a[0][0] + "  " + a[0][1] + " " + a[0][2] );
		System.out.println("1   " + a[1][0] + "  " + a[1][1] + " " + a[1][2] );
		System.out.println("2   " + a[2][0] + "  " + a[2][1] + " " + a[2][2] );
		
		if (cont >= 5)
		{
			if ((a[0][0] == a[0][1] && a[0][0] == a[0][2])||
			    (a[1][0] == a[1][1] && a[1][0] == a[1][2])||
			    (a[2][0] == a[2][1] && a[2][0] == a[2][2])||
			    (a[0][0] == a[1][0] && a[0][0] == a[2][0])||
			    (a[0][1] == a[1][1] && a[0][1] == a[2][1])||
			    (a[0][2] == a[1][2] && a[0][2] == a[2][2])|| 
			    (a[2][2] == a[0][0] && a[2][2] == a[1][1])||
			    (a[0][2] == a[1][1] && a[1][1] == a[2][0])) 
				
				
			{
				if (a[0][0] == "o") 
				{
					System.out.println("\n\nJogador 2 venceu!!! =D =D ");
					break;
				}
			} 																
			} 
		if (cont == 9) 
		{																			
			System.out.println("Deu Velha!!!");
			break;
			}
		}

}
}

}

Olá, ficaria mais fácil ajudar se disser oq está acontecendo de errado.

Vc ta pedindo um valor e o armazena em l, mas fica verificando a variável i pra ver está correto?
Mesma coisa onde vc pede a coluna, vc ta usando uma var completamente diferente.
Vai ficar em um loop infinito.

Boa noite…
Entendo…
Desculpem a demora, mas estou em semana de provas e conciliar provas e trabalho está me deixando de cabelo em pé!

Pois bem, vamos lá!

Corrigi todos os bugs, menos 1 (acho que no dia eu estava meio dormindo, assim como hoje.)

O que acontece: Na hora de validar os if do teste das posições, está misturando o teste entre linha e diagonal, dando como vencedor, o primeiro jogador, quando acontece a seguinte jogada:

 0 1 2

0 X O X
1 O X -
2 - - -

O teste está assim:

if (cont > 4)
{
if (a[0][0] == “X”)
{
if ((a[0][0] == a[0][1] && a[0][1] == a[0][2]) ||
//linha 1
(a[1][0] == a[1][1] && a[1][1] == a[1][2])||
// linha 2
(a[2][0] == a[2][1] && a[2][1] == a[2][2])||
// linha 3
(a[0][0] == a[1][0] && a[1][0] == a[2][0])||
// coluna 1
(a[0][1] == a[1][1] && a[1][1] == a[2][1])||
// coluna 2
(a[0][2] == a[1][2] && a[1][2] == a[2][2])||
// coluna 3
(a[0][0] == a[1][1] && a[1][1] == a[2][2])||
// diagonal 1
(a[0][2] == a[1][1] && a[1][1] == a[2][0]))
// diagonal 2

				{
					System.out.println("\n\nJogador 1 venceu!!!");
					break;
				}
																									
			}} 				

da mesma forma, para testar o “O”. Se alguém tiver alguma ideia de como resolver, serei muito grato.

Consegui resolver.

Deu erro na autenticação, pois a matriz estava preenchida com “-” e, se houvesse alguma linha sem “X” ou "O ele autenticava por “-”. Arrumando esse erro, agora ficou perfeito.