5
respostas

Alguem pode me ajudar a resolver o problema com Null?

O meu codigo vai ficar no final mas para entender o que estou tentando fazer sem sucesso ='(.

Eu percebi que quando voce clica em "cancelar" e inserido como valor "null" e a contagem continua, eu coloquei desta forma:

if (ingrediente == null){

            alert ("Ingrediente nao pode ser nulo")
            break;
        }

Mas eu imaginei que ele voltaria para o mesmo campo de input novamente.

Como posso barrar o usuario de colocar "null" no programa? Ou como remover o botao "cancelar" pois acredito q desta forma o usuario nao consegue colocar "null"

<meta charset="UTF-8">

<h1>Receitas do Fabio</h1>

<script>
    var ingredientes = [];

    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

    var contador = 1;

    while( contador <= quantidade) {

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

        if (ingrediente == null){

            alert ("Ingrediente nao pode ser nulo")
            break;
        }

        var repetido = false;

        for (posicao = 0; posicao < ingredientes.length; posicao++) {

            if (ingredientes [posicao] == ingrediente){

                repetido = true;
                alert ("Ingrediente repetido, entre com um novo ingrediente")

                break;
            }
        }

        if (repetido == false) {

            ingredientes.push(ingrediente);

            contador++;

        }




    }

    console.log(ingredientes);

</script>
5 respostas

Oi boa noite,

Vou tentar dar uma breve resumida do porque o ingrediente == null não funcionar da forma que você espera, e te explicar como arrumar isso.

No Js uma das coisas mais confusas é os booleanos, nada é oq parece, por isso antes de tudo recomendo você dar uma pesquisa sobre.

No js ingrediente == null seria equivalente a NaN == 0 pois booleanos no Js são convertidos para numeros utilizando toNumber por debaixo dos panos, então quando você utiliza toNumber em uma string o valor retorna sera NaN.

Já o null é "equivalente" a false, e quando o Js "utiliza" o toNumber no false ele retorna 0.

Então você está fazendo a seguinte pergunta Não é um Numero == 0 por isso retorna false.

Para você arrumar isso você deve utilizar o seguinte código:

if (ingrediente.length == 0){
        ///Seu código aqui
}

Aqui você esta perguntado se o tamanho da string é igual a 0, então caso você digite uma palavra de 5 letras, ele vai fazer a seguinte pergunta:

5 == 0

E caso você não digite nada, vai ser uma string de 0 letras então irá ser algo assim:

0 == 0

Você poderia colocar assim também:

ingrediente.length == false

Pois como eu falei acima, o Js "passa" toNumber nos booleanos, e o false seria "equivalente" a 0.

Não sei se ficou muito confuso mas espero ter ajudado :)

Se quiser entender mais sobre, recomendo o livro "Estruturas de dados e algoritmos com javascript" da Loiane Groner, um dos primeiros tópicos fala exatamente sobre isso.

Jandson, esse código que você colocou, resolve o problema se o usuário clicar em Ok sem digitar nada, porque o valor de ingrediente vai ser "", ou seja, vazio, e realmente ingrediente.length == 0, e ele vai entrar na condição. Mas pelo que eu entendi, o valor de ingrediente está retornando nulo, e o js não consegue aplicar o método length em uma variavel nula.

Ah Matheus obrigado por esclarecer, interpretei um pouco errado.

Se esse for o caso ele pode obrigar o usuario a digitar algo com o do dessa forma:

do {
         var ingrediente = prompt("Informe o ingrediente " + contador);
} while (ingrediente == null || ingrediente.length == 0);

É só você substituir o if (ingrediente == null){Código}; por esse código acima, e colocar o prompt dentro do do.

Acho que não faz muito sentido tirar a função de cancelar, mas se essa for a intenção o código acima funciona.

Espero que tenha ajudado, e obrigado novamente Matheus por esclarecer o meu erro :)

Valeu.

Boa noite, acredito que uma soluçao simples seria retirar do IF a instruçao de compara com 'null' ficando apenasif(!ingrediente) { //Seu código } isso fara com que a variavel seja testadoa antes de seguir com a execuçao. Basicamente o codigo esta dizendo se{nao digitou ingrediente) { execute isto } espero ter ajudado.