1
resposta

resolução Jogo de advinhação

public class Main {
public static void main(String[] args) {
// Jogo da adivinhação

    // Gerar número aleatório
    int numeroAleatorio = new Random().nextInt(100);
    // Scanner para obter resposta do usuário
    Scanner sc = new Scanner(System.in);
    // Variável para contar tentativas
    int tentativas = 1;
    Integer escolhaUsuario = 0;
    boolean menor = escolhaUsuario < numeroAleatorio;
    boolean igual = escolhaUsuario == numeroAleatorio;
    boolean maior = escolhaUsuario > numeroAleatorio;

   // Loop para controlar tentativas
    while (tentativas <= 5) {
        System.out.print("Tentativa: " + tentativas + "/5 - Escolha um número entre 0 e 100:");
        //aceita apenas número inteiros sem quebrar a aplicação
        try {

            escolhaUsuario = sc.nextInt();

            if (escolhaUsuario instanceof Integer) {
                // Verificação de número válido
                if (escolhaUsuario >= 0 && escolhaUsuario < 100) {
                    //switch case (maior, menor, igual ao numero aleatorio)
                    if (escolhaUsuario < numeroAleatorio) {
                        System.out.println("Tente um número maior");
                        tentativas++;
                    } else if (escolhaUsuario > numeroAleatorio) {
                        System.out.println("Tente um número menor");
                        tentativas++;
                    } else {
                        System.out.println("Parabéns, você acertou o número! De fato era o número: " + numeroAleatorio);
                        // interrompe o loop
                        break;
                    }
                } else {
                    System.out.println("Opção inválida! Tente novamente (esse erro custa suas tentativas)");
                    tentativas++;
                }
            }
        } catch (InputMismatchException e) {
            tentativas++;
            System.out.println("Digite apenas números inteiros");
            sc.nextLine();
        }
    }
        if (tentativas > 5) {
            System.out.println("Suas tentativas acabaram :( Inicie novamente");
        }
        sc.close();
    }
}
1 resposta

Olá, Luís. Como vai?

Parabéns pela resolução do desafio! Ficou muito bacana como você estruturou o código, especialmente por ter tido o cuidado de utilizar o bloco try-catch para tratar erros de entrada de dados, o que demonstra uma ótima preocupação com a experiência do usuário e a robustez do programa.

Analisando seu código, gostaria de pontuar alguns detalhes interessantes que podem te ajudar a deixá-lo ainda mais refinado:

  • Lógica das Variáveis Booleanas: Notei que você declarou as variáveis menor, igual e maior logo no início. No Java, essas variáveis não são "dinâmicas". Elas guardam o resultado da comparação feita naquele exato momento da execução. Como escolhaUsuario é 0 no início, essas variáveis não serão atualizadas automaticamente quando o usuário digitar um novo número dentro do while. Por isso, sua decisão de fazer as comparações diretamente dentro dos if/else no loop foi a correta!

  • Controle de Tentativas: No seu código, se o usuário digita algo inválido ou fora do intervalo, ele perde uma tentativa. Uma abordagem alternativa para melhorar a experiência do usuário seria permitir que ele tente novamente sem descontar do total de tentativas em caso de erro de digitação.

  • Uso de classes: Lembre-se de importar as classes Scanner, Random e InputMismatchException no topo do arquivo para que o código compile corretamente.
    Veja uma pequena sugestão de como o fluxo de controle está funcionando no seu while:

// Exemplo de como simplificar a lógica de validação dentro do while
if (escolhaUsuario < 0 || escolhaUsuario > 100) {
    System.out.println("Número fora do intervalo! Tente um valor entre 0 e 100.");
    continue; // O continue pula para a próxima iteração sem executar o que vem abaixo
}

Utilizar o sc.nextLine() dentro do catch foi um ponto excelente, pois limpa o buffer do teclado e evita que o programa entre em um loop infinito de erro.

Continue praticando, pois o domínio dessas estruturas de controle é fundamental para qualquer desenvolvedor Java!

Espero que possa ter lhe ajudado!