Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Melhoria de código] Jogo de adivinhação

Estou resolvendo o exercício "jogo de adivinhação", mas não achei que ficou tão legal a forma como parei o fluxo caso o usuário acerte. Usei o break para isso. Quero opiniões sobre formas melhores. O parâmetro "bound" está em 1 porque é um teste. Assim que acabar ele volta a ser int numeroGerado = random.nextInt(100);

Enfim, eis a classe:


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

public class AdivinhadorDeNumeroAleatorio {
    Random random = new Random();
    int numeroGerado = random.nextInt(1);
    int chute = 0;
    Scanner scanner = new Scanner(System.in);

    public void contaTentativas(){
        boolean acerto = false;
        leNumeroChutado();
        imprimeNumeros();
        for(int i = 1; i<5; i++) {
            if (chute == numeroGerado) {
                System.out.println("Você acertou");
                acerto = true;
                break;
            } else {
                leNumeroChutado();
                imprimeNumeros();
            }
        }
    }
    public int leNumeroChutado(){
        System.out.println("Digite um número de 1 a 100: ");
        chute = scanner.nextInt();
        return chute;
    }
    public void imprimeNumeros() {
        System.out.println("Número chutado: " + chute);
        System.out.println("Número gerado: " + numeroGerado);
    }
}

Na Main.java chamo o método : contaTentativas();

2 respostas
solução!

Olá Karina, tudo bem?

Entendo sua preocupação em melhorar o código e torná-lo mais eficiente. Uma alternativa para substituir o uso do break seria utilizar uma variável booleana para controlar o loop e sair dele apenas quando o usuário acertar ou atingir o limite de tentativas.

Veja como ficaria a implementação:

public void contaTentativas(){
    boolean acerto = false;
    leNumeroChutado();
    imprimeNumeros();
    int limiteTentativas = 5;
    for(int i = 1; i <= limiteTentativas && !acerto; i++) {
        if (chute == numeroGerado) {
            System.out.println("Você acertou");
            acerto = true;
        } else {
            leNumeroChutado();
            imprimeNumeros();
        }
    }
    if (!acerto) {
        System.out.println("Suas tentativas acabaram. O número era " + numeroGerado);
    }
}

Dessa forma, o loop será interrompido apenas quando o usuário acertar ou quando atingir o limite de tentativas. Caso o limite seja atingido e o usuário não tenha acertado, uma mensagem será exibida informando qual era o número gerado.

Espero ter ajudado e bons estudos!

Essa é uma boa ideia. Testei e funciona. Obrigada.