1
resposta

Jogo de Adivinhação: Minha solução

/* Crie um programa que simula um jogo de adivinhação, que deve gerar um número aleatório entre 0 e 100 e pedir para que o usuário tente adivinhar o número, em até 5 tentativas. A cada tentativa, o programa deve informar se o número digitado pelo usuário é maior ou menor do que o número gerado. */ import java.util.Random; import java.util.Scanner;

public class JogoAdivinhar { public static void main(String[] args) { int numerosDeEscolhas = 6; int totalAtualDeEscolha = 0; int numeroEscolhidoDoUsuario = 0;

    int escolhaDoComputador = new Random().nextInt(100);
    //System.out.println(escolhaDoComputador); //visualizar o número que o computador escolheu para testes.

    while (true){
        if (numerosDeEscolhas > 0 || numeroEscolhidoDoUsuario != escolhaDoComputador ){
            Scanner numeroDigitadoDoUsuario = new Scanner(System.in);

            System.out.print("Usuário, escolha um número: ");
            int numeroDoUsuario = numeroDigitadoDoUsuario.nextInt();

            if (numeroDoUsuario < escolhaDoComputador) {
                System.out.println("Você escolheu um número menor, digite outro.") ;
            }if (numeroDoUsuario > escolhaDoComputador) {
                System.out.println("Você escolheu um número maior, digite outro.") ;
            }if (numeroDoUsuario == escolhaDoComputador) {
                System.out.printf("Você adivinhou o número %d foi o escolhido pelo computador, você venceu o Jogo.", numeroDoUsuario);
                break;
            }else {
                numerosDeEscolhas--;
                totalAtualDeEscolha = numerosDeEscolhas;
                if (totalAtualDeEscolha == 0) {
                    System.out.println("Você atingiu o número máximo de tentativas, 'Fim do jogo'");
                    break;
                }
                System.out.printf("Digite novamente, você tem %d de tentativas ", totalAtualDeEscolha);
            }
        }
    }
}

}

1 resposta

Oi, Marcelo! Como vai?

Seu código já está bem estruturado, mas tem alguns ajustes necessários. O problema principal está na lógica da contagem de tentativas, que pode gerar um loop infinito. Além disso, o Scanner está sendo instanciado dentro do while, o que pode causar consumo desnecessário de memória.

Veja este exemplo corrigido e otimizado:

import java.util.Random;
import java.util.Scanner;

public class JogoAdivinhacao {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        int numeroSecreto = random.nextInt(101); // Número entre 0 e 100
        int tentativasRestantes = 5;

        System.out.println("Tente adivinhar o número entre 0 e 100!");

        while (tentativasRestantes > 0) {
            System.out.print("Digite um número: ");
            int palpite = scanner.nextInt();

            if (palpite == numeroSecreto) {
                System.out.println("Parabéns! Você acertou o número " + numeroSecreto);
                break;
            } else if (palpite < numeroSecreto) {
                System.out.println("O número é maior!");
            } else {
                System.out.println("O número é menor!");
            }

            tentativasRestantes--;

            if (tentativasRestantes > 0) {
                System.out.println("Você tem " + tentativasRestantes + " tentativas restantes.");
            } else {
                System.out.println("Fim do jogo! O número correto era " + numeroSecreto);
            }
        }

        scanner.close();
    }
}

O que foi ajustado?

  • Correção da contagem de tentativas: Agora o número reduz corretamente.
  • O Scanner foi instanciado fora do while: Isso evita criar múltiplos objetos desnecessários.
  • Uso de random.nextInt(101): Para garantir que o número vá até 100 (o original ia só até 99).
  • Saída mais organizada: Informações mais claras para o usuário.

Agora, seu jogo funciona corretamente e sem problemas de lógica!

Bons estudos!