Olá Alexandre, tudo bem?
Realmente, a solução apresentada pode apresentar uma falha. Se o usuário acertar o número na quinta tentativa, a mensagem de erro ainda será exibida, o que não é o comportamento desejado.
Sobre sua pergunta, sim, o if
deve estar dentro do bloco while
, para que a verificação seja feita a cada tentativa. Dessa forma, caso o usuário acerte o número em qualquer uma das tentativas, a mensagem de sucesso será exibida e o loop será interrompido.
Segue um exemplo de como ficaria o código com essa alteração:
int tentativas = 0;
int numero = gerador.nextInt(101);
while (tentativas < 5) {
int palpite = scanner.nextInt();
tentativas++;
if (palpite == numero) {
System.out.printf("Parabéns, você acertou o número em %d tentativas!", tentativas);
break;
} else {
System.out.println("Você errou!");
}
}
if (tentativas == 5) {
System.out.printf("Você não conseguiu adivinhar o número em 5 tentativas. O número era %d", numero);
}
Espero ter ajudado e bons estudos!