Erro no JAVA

Gente, já quebrei muito a cabeça e não consigo encontrar onde eu errei aqui pra dar Exception in thread “main” : Index -1 out of bounds for length 3 toda hora. Eu tô tentando construir um jogo da velha.
package celine;
import java.util.Scanner;
public class Lista5 { public static void main(String[]args) {
Scanner scan = new Scanner(System.in);
char Tabuleiro [][] = new char[3][3];
System.out.println(“Jogador 1=X”+"\n"+“Jogador 2=O”);
int jogada =1;
char valor =0;
boolean ganhou = false;
boolean linhaVálida = false;
boolean colunaVálida = false;
int linha = 0;
int coluna = 0;
while (!ganhou){

    if (jogada % 2 != 0){
        
        System.out.println("É a vez do jogador 1.");
        valor = 'X';
    } else if(jogada %2 == 0){
        
        System.out.println(" É a vez do jogador 2.");
        valor = 'O';
    }
while(!linhaVálida) {
	System.out.println("Digite a linha que você quer jogar, por favor(1-3)");
	linha = scan.nextInt();
	if(linha>=1&&linha<=3) {linhaVálida=true;}
	else {System.out.println("A linha que você digitou é inválida. Digite novamente ");}
}
while(!colunaVálida) {
	System.out.println("Digite a coluna que você quer jogar, por favor(1-3)");
	coluna = scan.nextInt();
	if(coluna>=1&&coluna<=3) {colunaVálida=true;}
	else {System.out.println("A coluna que você digitou é inválida. Digite novamente ");}
	}
linha--;coluna--;
if(Tabuleiro[linha][coluna]=='X' || Tabuleiro[linha][coluna]=='O'){
System.out.println("A posição que você escolheu já está ocupada. Tente novamente.");	
 }
else {
	Tabuleiro[linha][coluna]=valor; jogada++;
}	
	for(int i=0;i<Tabuleiro.length;i++) {
		for(int j=0;j<Tabuleiro[i].length;j++) {
			System.out.print(Tabuleiro[i][j]+" | ");
		}
		System.out.println();
	}
	if((Tabuleiro[0][0]=='X' && Tabuleiro[0][1]=='X' && Tabuleiro[0][2]=='X')||
			(Tabuleiro[1][0]=='X' && Tabuleiro[1][1]=='X' && Tabuleiro[1][2]=='X') ||
			(Tabuleiro[2][0]=='X' && Tabuleiro[2][1]=='X' && Tabuleiro[2][2]=='X') ||
			(Tabuleiro[0][0]=='X' && Tabuleiro[1][0]=='X' && Tabuleiro[2][0]=='X') ||
			(Tabuleiro[0][1]=='X' && Tabuleiro[1][1]=='X' && Tabuleiro[2][1]=='X') ||
			(Tabuleiro[0][2]=='X' && Tabuleiro[1][2]=='X' && Tabuleiro[2][2]=='X') ||
			(Tabuleiro[0][0]=='X' && Tabuleiro[1][1]=='X' && Tabuleiro[2][2]=='X') ||
			(Tabuleiro[0][2]=='X' && Tabuleiro[1][1]=='X' && Tabuleiro[2][0]=='X')
			) 
	{ganhou=true;System.out.println("O jogador 1 ganhou. Parabéns!");}
	else if((Tabuleiro[0][0]=='O' && Tabuleiro[0][1]=='O' && Tabuleiro[0][2]=='O')||
			(Tabuleiro[1][0]=='O' && Tabuleiro[1][1]=='O' && Tabuleiro[1][2]=='O') ||
			(Tabuleiro[2][0]=='O' && Tabuleiro[2][1]=='O' && Tabuleiro[2][2]=='O') ||
			(Tabuleiro[0][0]=='O' && Tabuleiro[1][0]=='O' && Tabuleiro[2][0]=='O') ||
			(Tabuleiro[0][1]=='O' && Tabuleiro[1][1]=='O' && Tabuleiro[2][1]=='O') ||
			(Tabuleiro[0][2]=='O' && Tabuleiro[1][2]=='O' && Tabuleiro[2][2]=='O') ||
			(Tabuleiro[0][0]=='O' && Tabuleiro[1][1]=='O' && Tabuleiro[2][2]=='O') ||
			(Tabuleiro[0][2]=='O' && Tabuleiro[1][1]=='O' && Tabuleiro[2][0]=='O')
			) 
	{ganhou=true;System.out.println("O jogador 2 ganhou. Parabéns!");}
	else if(jogada>9) {System.out.println("Deu velha.");}
	
	
	
	
	
	}}}

no final do while !ganhou adicione:

linhaVálida = false;
colunaVálida = false;
2 curtidas

Deu certo. Obrigado!