Problemas programa java jogo da velha

Ola a todos

Estou fazendo um programa do jogo da velha em java, utilizando uma interface para verificar o vencedor, mas esta apresentando erro e nao estou conseguindo detectar o problema, alguem poderia me ajudar nessa ? Segue o codigo feito.

public interface IJogoVelha {
  char verificaGanhador(char[][] tabuleiro) throws Exception;
}
public class JogoDaVelha implements IJogoVelha {
  
  String[]][] m= {{"1","2","3",},{"4","5","6"},{"7","8","9"}}; // matriz
  
  public String Mostrar() {
    for(int li=0;li<3;li++) {
      for(int co=0; co<3; co++) {
        System.out.printf("  " + m[li] [co]);
      }
      
      System.out.println("\n");
    }
    
    return null;
  }
  
  public boolean Valido(String p) {
    for (int li=0; li<3; li++) {
      for (int co=0; co<3; co++) {
        if (m[li] [co].equals (p))
          return true;
      }
    }
    
    return false;
  }
  
  public void Jogada(String p, String j) {
    if(p.equals("1"))
      m[0][0] = j;
    else if(p.equals("2"))
      m[0] [1] = j;
    else if(p.equals("3"))
      m[0] [2] = j;
    else if(p.equals("4"))
      m[1] [0] = j;
    else if(p.equals("5"))
      m[1] [1] = j;
    else if(p.equals("6"))
      m[1] [2] = j;
    else if(p.equals("7"))
      m[2] [0] = j;
    else if(p.equals("8"))
      m[2] [1] = j;
    else if(p.equals("9"))
      m[2] [2] = j;
  }
  
  @Override
	public char verificaGanhador(char[][] tabuleiro) throws Exception {
		String[] t = new String[8];      // vetor
		String vencedor = "null";

		if (jogadas == 9) {
			vencedor ="EMPATE";
		}
    
    // linhas verticais
		T[0] = m[0] [0] + m[0] [1] + m[0] [2];
		T[1] = m[1] [0] + m[1] [1] + m[1] [2];
		T[2] = m[2] [0] + m[2] [1] + m[2] [2];
		
    // linhas horizontais
		T[3] = m[0] [0] + m[1] [0] + m[2] [0];
		T[4] = m[0] [1] + m[1] [1] + m[2] [1];
		T[5] = m[0] [2] + m[1] [2] + m[2] [2];
		
    // linhas diagonais
		T[6] = m[0] [0] + m[1] [1] + m[2] [1];
		T[7] = m[0] [2] + m[1] [1] + m[2] [0];
    
    for (int i = 0; i < T.length; i++) {
			if(T[1].equals("XXX")) {
        vencedor = "JOGADOR 1";
			} else if (T[1].equals("OOO")) {
        vencedor = "JOGADOR 2";
      }
    }
    
    return vencedor;
	}
}
import java.util.Scanner;

public class JogoVelha {
  
  public static void main(String[] args) {
		Scanner ler = new Scanner(System.in);
		JogoDaVelha jogo = new JogoDaVelha();
		String posicao;
		int valida = 0, Jogadas = 0;
		
		while (true) {
			System.out.println(":::::::: jogo da velha::::::::::");
			jogo.Mostrar();
			
			do { // inicia Jogador 1
				System.out.print("Jogador 1, informe uma posicao:  ");
				posicao = ler.next();

				while (!jogo.Valido(posicao)) {
					System.out.println("Jogada invalida, tente novamente!");
					System.out.print("Jogador 1, informe uma posicao:  ");
					posicao = ler.next();
					valida = 0;
				}

				jogo.Jogada(posicao,"X");
				valida = 1;
			} while (valida == 0); //fim Jogador 1
			
			Jogadas++;
			valida = 0;
			jogo.Mostrar();
			
			if (!jogo.Ganhou(Jogadas).equals("null")) {
				break; // para encerrar o primeiro while
			}
		
			do { // inicia Jogador 2
				System.out.print("Jogador 2, informe uma posicao:  ");
				posicao = ler.next();

				while (!jogo.Valido(posicao)) {
					System.out.println("Jogada invalida, tente novamente!");
					System.out.print("Jogador 2, informe uma posicao:  ");
					posicao = ler.next();
					valida = 0;
				}

				jogo.Jogada(posicao,"O");
				valida = 1;
				jogo.Mostrar();
			} while (valida == 0); //fim Jogador 2

			Jogadas++;
			valida = 0;

			if (!jogo.Ganhou(Jogadas).equals("null")) {
				break; // para encerrar o primeiro while
			}
		}
		
    System.out.println("O" + jogo.Ganhou(Jogadas) + "venceu!");
	}
}

q erro?

Ola

Esta com erro no metodo verificaGanhador, pois foi dado uma variavel tipo char mas nao estou conseguindo utilizar corretamente pois estou em duvida para verificar o vencedor, segue o codigo.

public class JogoDaVelha implements IJogoVelha {

String [] [] m= {{"1","2","3",},{"4","5","6"},{"7","8","9"}}; // matriz

public String Mostrar() {
	for(int li=0;li<3;li++) {
		for(int co=0; co<3; co++) {
			System.out.printf("  " + m[li] [co]);
		}
		 System.out.println("\n");
		}
		return null;
} //-------------------------------------------------------

public boolean Valido(String p) {
	for(int li=0; li<3; li++) {
		for(int co=0; co<3; co++) {
			if(m[li] [co].equals (p))
				return true;
		}
	}
		return false;
}  //-----------------------------------------------------

public void Jogada(String p, String j) {
	if(p.equals("1"))
		m[0][0] = j;
	else if(p.equals("2"))
		m[0] [1] = j;
	else if(p.equals("3"))
		m[0] [2] = j;
	else if(p.equals("4"))
		m[1] [0] = j;
	else if(p.equals("5"))
		m[1] [1] = j;
	else if(p.equals("6"))
		m[1] [2] = j;
	else if(p.equals("7"))
		m[2] [0] = j;
	else if(p.equals("8"))
		m[2] [1] = j;
	else if(p.equals("9"))
		m[2] [2] = j;
} //----------------------------------------------------------------------------------------------


@Override
public char verificaGanhador(char[][] tabuleiro) throws Exception {
	int jogadas;
	String[] tabuleiro= new String[8];      // vetor
	String vencedor= "null";
	if(jogadas == 9) {
		vencedor ="EMPATE";
	}                                               // linhas verticais
	 tabuleiro[0] = m[0] [0] + m[0] [1] + m[0] [2];
	 tabuleiro[1] = m[1] [0] + m[1] [1] + m[1] [2];
	 tabuleiro[2] = m[2] [0] + m[2] [1] + m[2] [2];
	 //-------------------------------------------------------------------------------------------
	                                                // linhas horizontabuleiroais
	 tabuleiro[3] = m[0] [0] + m[1] [0] + m[2] [0];
	 tabuleiro[4] = m[0] [1] + m[1] [1] + m[2] [1];
	 tabuleiro[5] = m[0] [2] + m[1] [2] + m[2] [2];
	 
	 // ------------------------------------------------------------------------------------------
	 												// linhas diagonais
	 
	 tabuleiro[6] = m[0] [0] + m[1] [1] + m[2] [1];
	 tabuleiro[7] = m[0] [2] + m[1] [1] + m[2] [0];
	 
	 
	 for(int i=0; i<tabuleiro.length; i++) {
		 
		 if(tabuleiro[1].equals("XXX")) {
			vencedor="JOGADOR 1";
			
		 } else if (tabuleiro[1].equals("OOO")) {
				vencedor="JOGADOR 2";
		 }	
			
		 }
	 return vencedor;
} //----------------------------------------------------------------------------------------------

}

O teste no Main:

import java.util.Scanner;

public class JogoVelhaMain {

public static void main(String[] args) {
	
	Scanner ler= new Scanner(System.in);
	JogoDaVelha jogo=new JogoDaVelha();
	String posicao;
	int valida=0, Jogadas=0;
	
	while(true) { //--------------------------------------------------------------
		System.out.println(":::::::: jogo da velha::::::::::");
		jogo.Mostrar();
		
		do { // inicia Jogador 1 ----------------------------------------------------
			System.out.print("Jogador 1, informe uma posicao:  ");
			posicao=ler.next();
			while(!jogo.Valido(posicao)){
				System.out.println("Jogada invalida, tente novamente!");
				System.out.print("Jogador 1, informe uma posicao:  ");
				posicao=ler.next();
				valida=0;
			}
			jogo.Jogada(posicao,"X");
			valida=1;
		
		} while(valida==0); //fim Jogador 1 ----------------------------------------------
		
		Jogadas++;
		valida=0;
		jogo.Mostrar();
		
		if(!jogo.Ganhou(Jogadas).equals("null")) {
			break;    // para encerrar o primeiro while
		}
	
		do { // inicia Jogador 2 ----------------------------------------------------
			System.out.print("Jogador 2, informe uma posicao:  ");
			posicao=ler.next();
			while(!jogo.Valido(posicao)){
				System.out.println("Jogada invalida, tente novamente!");
				System.out.print("Jogador 2, informe uma posicao:  ");
				posicao=ler.next();
				valida=0;
			}
			jogo.Jogada(posicao,"O");
			valida=1;
			jogo.Mostrar();
		
		} while(valida==0); //fim Jogador 2 ----------------------------------------------
	
		Jogadas++;
		valida=0;
		if(!jogo.Ganhou(Jogadas).equals("null")) {
			break;    // para encerrar o primeiro while
		}
	
	
	
	} //-------------------------------------------------------------------------------------
	
		System.out.println("O" + jogo.Ganhou(Jogadas) + "venceu!");
	
	}

}

Como é que você verifica o ganhador de um jogo da velha?
Verificando se tem 3 símbolos iguais numa linha, numa coluna ou numa diagonal.

Implementação da interface:

public class JogoDaVelha implements IJogoVelha {

	@Override
	public char verificaGanhador(char[][] tabuleiro) {
		int linha = verificaLinhas(tabuleiro);
		if (linha != -1) {
			return tabuleiro[linha][0];
		}
		int coluna = verificaColunas(tabuleiro);
		if (coluna != -1) {
			return tabuleiro[0][coluna];
		}
		int diagonal = verificaDiagonais(tabuleiro);
		if (diagonal != -1) {
			return tabuleiro[diagonal][diagonal];
		}
		return 0;
	}

	private int verificaDiagonais(char[][] tabuleiro) {
		if (tabuleiro[0][0] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][2]) {
			return 1;
		}
		if (tabuleiro[0][2] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][0]) {
			return 1;
		}
		return -1;
	}

	private int verificaColunas(char[][] tabuleiro) {
		for (int col = 0; col < 3; col++) {
			if (tabuleiro[0][col] == tabuleiro[1][col] && tabuleiro[1][col] == tabuleiro[2][col]) {
				return col;
			}
		}
		return -1;
	}

	private int verificaLinhas(char[][] tabuleiro) {
		for (int lin = 0; lin < 3; lin++) {
			if (tabuleiro[lin][0] == tabuleiro[lin][1] && tabuleiro[lin][1] == tabuleiro[lin][2]) {
				return lin;
			}
		}
		return -1;
	}
}

Teste da implementação:

public class Teste {

	public static void main(String[] args) {
		JogoDaVelha jogoDaVelha= new JogoDaVelha();
		
		char[][] tabuleiro = new char[][] {
			new char[] {'X', 'O', 'X'},
			new char[] {'O', 'O', 'X'},
			new char[] {'X', 'X', 'O'},
		};
		char ganhador = jogoDaVelha.verificaGanhador(tabuleiro);
		System.out.println("Ganhador: " + ganhador);
		
		tabuleiro = new char[][] {
			new char[] {'O', 'X', ' '},
			new char[] {'O', 'O', ' '},
			new char[] {'X', 'X', 'O'},
		};
		ganhador = jogoDaVelha.verificaGanhador(tabuleiro);
		System.out.println("Ganhador: " + ganhador);
		
		tabuleiro = new char[][] {
			new char[] {'X', 'X', 'X'},
			new char[] {' ', 'O', ' '},
			new char[] {'X', 'O', 'O'},
		};
		ganhador = jogoDaVelha.verificaGanhador(tabuleiro);
		System.out.println("Ganhador: " + ganhador);
	}
}

Ola
Obrigado pela dica, vou estar esse caminho que voce orientou !