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

Eu posso reiniciar meu programa após o valor da quantidade ser inválido?

Fiz algumas alterações no programa original, adicionando algumas funções. Todas estão funcionando corretamente, mas uma ainda está me deixando insatisfeito. No começo do programa, quando é pedido que o usuário digite a quantidade de ingreditentes, percebi que caso eu não digitasse um valor inteiro, o programa não seguia adiante e aparecia apenas a tela escrita "Receitas do Yan".

Decidi acrescentar uma função que verifica se o valor da quantidade era inteiro, e caso contrário, apareceria uma mensagem de erro:

function verificaQuantidade(valor) {
        if (Number.isInteger(valor) == false) {
            alert('Valor inválido! Digite um número inteiro!');
        }
        return valor;
    }

O código funciona corretamente e a mensagem de erro aparece. Porém, após isso, ele volta pra mesma tela com "Receitas do Yan". Gostaria de saber se tem como o programa reiniciar após a mensagem de erro e perguntasse novamente a quantidade de ingredientes que o usuário gostaria.

Código completo:

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<script>

    function pulaLinha() {
        document.write("<br>")
    }

    function listarIngredientes() {
        for (posicao = 0 ; posicao < ingredientes.length ; posicao++) {
            document.write(`<h3>${ingredientes[posicao]}</h3>`);
        }
        pulaLinha();
    }

    function verificaQuantidade(valor) {
        if (Number.isInteger(valor) == false) {
            alert('Valor inválido! Digite um número inteiro!');
        }
        return valor;
    }

    var ingredientes = [];
    var quantidadeInformada = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
    var quantidade = verificaQuantidade(quantidadeInformada);
    var contador = 1;

    while( contador <= quantidade) {

        var ingrediente = prompt("Informe o ingrediente " + contador);
        var achou = false;

        for (posicao = 0 ; posicao < ingredientes.length ; posicao++) {
            if (ingredientes[posicao] == ingrediente) {
                achou = true;
                alert('Ingrediente já adicionado!')
                break;
            }
        }

        if (achou == false) {
            ingredientes.push(ingrediente);
            contador++;
        }
    }

    listarIngredientes();
</script>
2 respostas
solução!

Faaaaaaala, Lucas, beleza?

Ajustei a sua função verificaQuantidade() e acho que assim vai ficar da maneira que você queria:

function verificaQuantidade(valor) {
        while (Number.isInteger(valor) == false) {
            alert("Valor inválido! Digite um número inteiro!");
            valor = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
        }
        return valor;
    }

Aproveitei o if que você tinha criado e transformei ele em um loop, só sai dele quando mudar o tipo da variável.

Opa, funcionou certinho! Muito obrigado! ^^