Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

duvida sobre outra forma de fazer o exercício

Fiz o exercício usndo if e else dentro de um while e funcionou, então tentei fazer por switch case, mas estou tento algum erro na lógica do meu programa ao qual ele não reconhece o caso 2 e nem o caso 3, como eu poderia resolver?

import java.util.Scanner; import java.util.Random; public class JogoDaAdivinhacao {

public static void main(String[] args) {

    Scanner leitor = new Scanner(System.in);
    int numeroCerto = new Random().nextInt(100);


    int tentativa = 0;

    while (tentativa < 5) {
        System.out.println("Digite um valor entre 0 e 100: ");
        int valor = leitor.nextInt();
        int caso = 0;

        tentativa++;

        if (valor <= 0 && valor >= 100){
            caso = 1;
        }
        else if (valor == numeroCerto) {
            caso = 2;

        }
        else{
            caso = 3;
        }

        switch (valor) {

            case 1:

                for (int i = 0; i < 3; i++) {


                    if (valor > numeroCerto) {
                        System.out.println("o valor é maior que o número gerado aleatóriamente");
                    } else {
                        System.out.println("o valor é menor que o número gerado aleatóriamente");
                    }
                }
                break;

            case 2:
                System.out.println("Acertou, e com o total de " +tentativa + "tentativas você acertou advinhou o número: " + numeroCerto);
                break;

           case 3:
                System.out.println("valor inválido");
                break;

            }
        }

}
1 resposta
solução!

Dentro dos if's do while você verifica as condições do valor e atribui a variavel "caso" e depois usa um switch verificando a variavel "valor", dessa forma seu codigo não esta funcionando. Do jeito que esta, seu codigo verifica no switch se valor == 1, 2 ou 3.

Alem disso no seu if (valor <= 0 && valor >= 100), você esta verificando se o valor é ao mesmo tempo menor ou igual a 0 e maior ou igual a 100. Deve usar o || nesse caso (ou).

Também sugiro sempre que estiver com erros, testar com valores menores como 10 por exemplo, e colocar um print para mostrar no log os valores.

Dentro do case 1 tambem não é necessário o loop.

public static void main(String[] args) {

        Scanner leitor = new Scanner(System.in);
        int numeroCerto = new Random().nextInt(100);


        int tentativa = 0;

        while (tentativa < 5) {
            System.out.println(numeroCerto);
            System.out.println("Digite um valor entre 0 e 100: ");
            int valor = leitor.nextInt();
            int caso = 0;

            tentativa++;

            if (valor == numeroCerto){
                caso = 2;
            }
            else if (valor <= 0 || valor >= 100) {
                caso = 3;
            }
            else{
                caso = 1;
            }

            switch (caso) {

                case 1:
                        if (valor > numeroCerto) {
                            System.out.println("o valor é maior que o número gerado aleatóriamente");
                        } else {
                            System.out.println("o valor é menor que o número gerado aleatóriamente");
                        }
                    break;
                case 2:
                    System.out.println("Acertou, e com o total de " + tentativa + " tentativas você acertou advinhou o número: " + numeroCerto);
                    break;

                case 3:
                    System.out.println("valor inválido");
                    break;
            }
        }
        System.out.println("Suas tentativas acabaram! O número era: " + numeroCerto);
    }