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

If fora do for

Eu quase consegui fazer sem colar do botão "VER OPINIÃO DO INSTRUTOR". Se eu digitasse 3 vezes "arroz" ia para a variável ingredientes mesmo assim. Depois de colar eu percebi que o meu segundo IF estava dentro do for. Com a correção meu código ficou assim... Poderia me explicar melhor pq esse if tem que ser fora do for?

<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 n = 0; n < quantidade; n++){

            if(ingrediente == ingredientes[n]){
                alert("Esse ingrediente já foi informado");
                achou = true; 
                break;                
            }                
        }//fechando for   

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

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

Bom Renan,

Você pode colocar ele dentro do for sem problemas, mas você tem que "parar" caso ele entre, como no primeiro.

Assim ele consegue sair do for e voltar ao while.

<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 n = 0; n < quantidade; n++){
            if(ingrediente == ingredientes[n]){
                alert("Esse ingrediente já foi informado");
                achou = true; 
                break;                
            }   
            if(achou == false){
                ingredientes.push(ingrediente);
                contador++;
                break; 
            }   
        }//fechando for   
    }//fechando while
    console.log(ingredientes);
</script>

Mas ai não faz sentido a variavel achou, pois você pode trata o que seria o segundo if, como o else do primeiro. Eliminando a variável e limpando o código:

<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);
        for(var n = 0; n < quantidade; n++){ 
            if(ingrediente == ingredientes[n]){
                alert("Esse ingrediente já foi informado");
                break;           
            }else{ // substitui o if fora do IF 
                ingredientes.push(ingrediente); 
                contador++;
                break; 
            }               
        }//fechando for  
    }//fechando while
    console.log(ingredientes);
    // apenas para um teste visual :)
    alert("Sua receita tera: " + quantidade + " itens. Sendo eles : " + ingredientes );  
</script>

Testa ai !

Dessas duas formas não funcionou, Vagner. Armazena "ingredientes" repetidos no array. Só funciona mesmo fora do for.

solução!

Boa noite, Renan! Como vai?

Perceba que o objetivo do for é percorrer o array verificando se o novo ingrediente já foi adicionado antes. Portanto, vc só pode verificar se não achou o novo ingrediente no array fazendo if(achou == false) após percorrer toda a lista de ingredientes o que só é garantido fora do for!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Gabriel eu consegui entender a logica e peço desculpas, no teste que eu fiz eu passei 2 valores e por isso não deu erro.

testei novamente passando 3 vezes e vi o porque colocou assim.

Tentei colocar abaixo o que entendi. Peço desculpas pela resposta anterior.


    while( contador <= quantidade) { 

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

        var achou = false;

        for(var n = 0; n < quantidade; n++){
        // entra com 0 < 3    

            // aqui que esta a questão ele passa 3x (ingredientes[1],ingredientes[3] e ingredientes[3])
            // comparando todos. Inclusive se esta em branco
            if(ingrediente == ingredientes[n]){  
                alert("Esse ingrediente já foi informado");
                achou = true; 
                break;                
            }                
        }//fechando for   

        //grava na ingredientes[x] 
        if(achou == false){
            ingredientes.push(ingrediente);
            contador++;
        }
    }//fechando while