Olá pessoal, estou fazendo um exercício de criação de um jogo da velha. Segue o código:
public static void main(String[] args) {
	
	Scanner scan = new Scanner(System.in);
	
	jogoDaVelha tabuleiro = new jogoDaVelha();
	System.out.println("Iniciando jogo");
	
	tabuleiro.nomeJogador1();
	tabuleiro.nomeJogador2();
	
	System.out.println(tabuleiro.nomeJogador1 + " jogará com o símbolo: 'X'");
	System.out.println(tabuleiro.nomeJogador2 + " jogará com o símbolo: 'O'");
	
	char simbolo = 'X'; 
	boolean jogadaValida = false;
	while(!jogadaValida) { 
		if(tabuleiro.jogada % 2 == 1) {
			System.out.println("Vez de " + tabuleiro.nomeJogador1 + ". Escolha linha e coluna 1-3.");
			simbolo = 'X';
		}else {
			System.out.println("Vez de " + tabuleiro.nomeJogador2 + ". Escolha linha e coluna 1-3");
			simbolo = 'O';
		} 
	}
	
	boolean linhaValida = false;
	int linha = 0, coluna = 0;
	while(!linhaValida) {
		System.out.println("Entre com a linha 1, 2 ou 3:");
		linha = scan.nextInt();
		if(linha >= 1 && linha <= tabuleiro.tamanhoTab1) {
			linhaValida = true;
		}else {
			System.out.println("Linha inexistente, tente novamente");
		}
	}
	
	boolean colunaValida = false;
	while(!colunaValida) {
		System.out.println("Entre com a coluna 1, 2 ou 3:");
		coluna = scan.nextInt();
		if(coluna >= 1 && coluna <= tabuleiro.tamanhoTab2) {
			colunaValida = true; 
		}else {
			System.out.println("Coluna inexistente, tente novamente");
		}
	}
	
	linha--;
	coluna--;
	
	if(tabuleiro.tabuleiro[linha][coluna] == 'X' || tabuleiro.tabuleiro[linha][coluna] == 'O') {
		System.out.println("Jogada inválida, tente novamente.");
	}else {
		tabuleiro.tabuleiro[linha][coluna] = simbolo;
		tabuleiro.jogada++;
	}
	
	for(int i = 0; i < tabuleiro.tabuleiro.length; i++) {
		for(int j = 0; j < tabuleiro.tabuleiro[i].length; j++) {
			System.out.print(tabuleiro.tabuleiro[i][j] + " | ");
		}
		System.out.println();
	}
	
	if((tabuleiro.tabuleiro[0][0] == 'X' && tabuleiro.tabuleiro[0][1] == 'X' && tabuleiro.tabuleiro[0][2] == 'X') || //Horizontal 1
		(tabuleiro.tabuleiro[1][0] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[1][2] == 'X') || //Horizontal 2
		(tabuleiro.tabuleiro[2][0] == 'X' && tabuleiro.tabuleiro[2][1] == 'X' && tabuleiro.tabuleiro[2][2] == 'X') || //Horizontal 3
		(tabuleiro.tabuleiro[0][0] == 'X' && tabuleiro.tabuleiro[1][0] == 'X' && tabuleiro.tabuleiro[2][0] == 'X') || //Vertical 1
		(tabuleiro.tabuleiro[0][1] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[2][1] == 'X') || //Vertical 2
		(tabuleiro.tabuleiro[0][2] == 'X' && tabuleiro.tabuleiro[1][2] == 'X' && tabuleiro.tabuleiro[2][2] == 'X') || //Vertical 3
		(tabuleiro.tabuleiro[0][0] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[2][2] == 'X') || //Diagonal
		(tabuleiro.tabuleiro[0][2] == 'X' && tabuleiro.tabuleiro[1][1] == 'X' && tabuleiro.tabuleiro[2][0] == 'X')) {//Diagonal inversa
		jogadaValida = true;
		System.out.println("Parabéns " + tabuleiro.nomeJogador1 + ", você ganhou!");
		}else if((tabuleiro.tabuleiro[0][0] == 'O' && tabuleiro.tabuleiro[0][1] == 'O' && tabuleiro.tabuleiro[0][2] == 'O') || //Horizontal 1
				(tabuleiro.tabuleiro[1][0] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[1][2] == 'O') || //Horizontal 2
				(tabuleiro.tabuleiro[2][0] == 'O' && tabuleiro.tabuleiro[2][1] == 'O' && tabuleiro.tabuleiro[2][2] == 'O') || //Horizontal 3
				(tabuleiro.tabuleiro[0][0] == 'O' && tabuleiro.tabuleiro[1][0] == 'O' && tabuleiro.tabuleiro[2][0] == 'O') || //Vertical 1
				(tabuleiro.tabuleiro[0][1] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[2][1] == 'O') || //Vertical 2
				(tabuleiro.tabuleiro[0][2] == 'O' && tabuleiro.tabuleiro[1][2] == 'O' && tabuleiro.tabuleiro[2][2] == 'O') || //Vertical 3
				(tabuleiro.tabuleiro[0][0] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[2][2] == 'O') || //Diagonal
				(tabuleiro.tabuleiro[0][2] == 'O' && tabuleiro.tabuleiro[1][1] == 'O' && tabuleiro.tabuleiro[2][0] == 'O')) {//Diagonal inversa
				jogadaValida = true;
				System.out.println("Parabéns " + tabuleiro.nomeJogador2 + ", você ganhou!");
		}else if(tabuleiro.jogada > 9) {
			jogadaValida = true;
			System.out.println(tabuleiro.nomeJogador1 + " e " + tabuleiro.nomeJogador2 + ", vocês empataram!");
		}
}
}
O primeiro while, não permite que ele prossiga o resto do código, fica num loop infinito do IF, visto que a variável “jogada” só vai mudar se o código continuar.
Tenho o mesmo código, feito depois, mas sem usar outra classe, o código todo numa classe só, e funciona essa parte do while normalmente. Segue o outro código:
public static void main(String[] args) {
	
    Scanner scan = new Scanner(System.in);
    
    char[][] jogoVelha = new char[3][3];
    
    System.out.println("Jogador 1 = X");
    System.out.println("Jogador 2 = O");
    
    boolean ganhou = false;
    int jogada = 1;
    char sinal;
    int linha = 0, coluna = 0;
    
    while (!ganhou){
        
        if (jogada % 2 == 1){ //jogador 1
            
            System.out.println("Vez do jogador 1. Escolha linha e coluna (1-3).");
            sinal = 'X';
        } else {
            
            System.out.println("Vez do jogador 2. Escolha linha e coluna (1-3).");
            sinal = 'O';
        }
Alguém poderia me dizer porque o segundo código ele continua para o próximo while e no primeiro não?
Sei que poderia usar outras formas de fazer esse laço prosseguir, mas como estou estudando, seria interessante entender.