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

ARRAY DE TAMANHO INESPERADO

Não entendi porque o código gera uma array de tamanho 4, nem porque alguns ingredientes entram nela mesmo estando repetidos.

<meta charset="UTF-8">

<h1>Receitas do Yan</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);
        var achou = false;        
        ingredientes.push(ingrediente);

        for (var posicao = 1; posicao <= ingredientes.length; posicao++ ){
            if(ingredientes[posicao] ==  ingrediente){
                achou == true
                alert(ingrediente + " já está na sua cesta. Escolha outro ingrediente para ser o ingrediente " + contador);
                ingrediente = prompt("Informe o ingrediente " + contador)
                break;
            }
        }

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

        }

    }

    console.log(ingredientes);
</script>
2 respostas

Pablo, o seu for deveria estar da seguinte forma:

for (var posicao = 0; posicao < ingredientes.length; posicao++) { ... }
Lembre-se que os índices das listas tem a contagem iniciada em 0.
solução!

Na linha 16 você inicia já inserindo o ingrediente dentro da lista de ingredientes ingredientes.push(ingrediente). Retira essa parte, pq a inserção de item é para ser feito apenas quando o segundo IF for executado, pois ele é executado depois de já ter sido verificado se tem repetições no ingredientes que você colocou.

Na linha 20 o código não roda pq você colocouachou == true. Nesse caso ele compara e ele precisa atribuir: achou = true;

Na linha 21 executa o PROMT (perguntando o item que o usuário quer adicionar) dentro do IF que já identificou um item repetido. Retira todo esse PROMPT, pq o problema de executar esse PROMPT dentro desse IF é pq o informação que você capturar aí para o ingrediente será perdido. Quando o PROMPT é executado e ele pega a informação do ingrediente, mas logo depois vem o break que faz com que o while comece tudo de novo e o que você havia perguntando no PROMPT para o ingrediente é perdido.

Deixa só o alerta, está ok. Ele irá aparecer depois de encontrar um item repetido e irá informar ao usuário dessa repetição. E não se preocupe, pois o while irá voltar a pedir um ingrediente para aquele que o usuário havia colocado repedido.

Nesse código, o memento certo de adicionar o ingrediente é só no 2º IF. No código que você escreveu já está lá e está certinho.

Só arrumar as coisa que falei em cima que o seu sistema irá rodar.

Vou deixar o seu código aí em baixo ajustado. Mas antes tenta entender como cada coisa funciona, pq fazer determinadas mudanças, pq é colocada a declaração e tal lugar e assim vai.

Espeto ter ajudado. Sucesso na sua jornada!!

<meta charset="UTF-8">

<h1>Receitas do Yan</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);
        var achou = false;        

        for (var posicao = 0; posicao < ingredientes.length ; posicao++ ){
            if(ingredientes[posicao] ==  ingrediente){
                achou = true;
                alert(ingrediente + " já está na sua cesta. Escolha outro ingrediente para ser o ingrediente " + contador);
                break;
            }
        }
        if(achou == false){
            ingredientes.push(ingrediente);
            contador ++;
        }

    }
    document.write(ingredientes);
</script>