Comportamento Estranho Inexplicável pra Mim

Como pode acontecer de ao final, depois de haver um ganhador, o jogo perguntar o nome do Jogador 1 e do Jogador 2 sem capturar a digitação se não tem um laço de repetição para algo assim?

Olá, Leandro.

Pode apontar mais exatamente a qual linha de qual classe do projeto está se referindo?

OBS: Já fiz uma versão do Jogo da Velha com comentários. Talvez ajude: https://github.com/RafaelSouzaValle/JogoDaVelha_Exercicio/tree/master/src/jogodavelha

1 curtida

Na execução do Exer04, depois de haver um ganhador, ele pede o nome do Jogador 1 e do Jogador 2, sem ler o Jogador 2 e dando mais uma resposta de final de jogo, mas não tem um laço de repetição com esse tipo de erro.

Leandro, sou um aprendiz na linguagem java, e desculpe se eu estiver errado, mas veja bem, no final do metodo inicioJogo() você chama o metodo validações, e no final do metodo validações() você chama o metodo verificarGanhador() e ao final deste, volta para metodo main() executando os metodos validações() e verificarGanhador() novamente.
Tente deixar o metodo main assim:

public static void main(String[] args) {
    JogoVelha jogoDaVelha = new JogoVelha();
    jogoDaVelha.inicioJogo();
    
}
1 curtida

Na classe Exer04, é instanciado um objeto que representa o jogo. À partir desse objeto, é invocado método que inicia o jogo. O que esse método faz é só imprimir na tela os símbolos dos jogadores e depois este invoca outro método, que é o validacoes(). O método validacoes() já começa imprimindo uma pergunta ("Qual o nome do Jogador 1? ") e invoca o método para inserir o nome pelo teclado. Nas duas linhas seguintes, isso se repete para o segundo jogador. Ainda neste método, segue a lógica do jogo e, na última linha, é invocado o método verificarGanhador(). Note que, neste ponto, já foram inseridos os nomes e a primeira jogada já foi feita. Ao final de cada jogada, o método verificarGanhador() é invocado para analisar se aquela jogada encerrou o jogo. Até que, quando a lógica de verificarGanhador() muda o atributo “ganhou” para true, logo após uma jogada, aquele que jogou é considerado ganhador e o jogo é terminado. Caso todas as casas do tabuleiro sejam lidas, ou seja, verificadas as 9 casas e nenhum tenha mudado o atributo “ganhou”, o jogo encerra como empatado. Ou seja, o looping que repete essa verificação, é o que fica na sétima linha do método validacoes(). Esse método tem chamadas a métodos fora dele próprio, logo, ele acessa o outro método e checa se a condição foi satisfeita. Caso a condição não tenha sido satisfeita, ele volta a executar a si próprio.

Conforme o Adriano disse, visto que esses métodos já são chamados de dentro do próprio método inicioJogo, não precisam constar na classe prinripal, portanto, essas linhas devem ser excluídas da classe Exer04:

jogoDaVelha.validacoes();
jogoDaVelha.verificarGanhador();

1 curtida