<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;
break;
}
}
while (achou == true) {
ingrediente = prompt("Ingrediente já informado, por favor, digite outro ingrediente.");
for (var posicao = 0; posicao < ingredientes.length; posicao++) {
if (ingredientes[posicao] == ingrediente) {
achou = true;
} else {
achou = false;
}
}
}
if (achou == false) {
ingredientes.push(ingrediente);
contador++;
}
}
console.log(ingredientes);
</script>
O problema que eu estava enfrentando era o seguinte: Durante os testes, caso eu repitisse um ingrediente logo após tê-lo digitado, o programa fazia o esperado. Porém, se eu colocasse um ingrediente novo e, logo em seguida, colocasse o primeiro ingrediente novamente, ele reconhecia inicialmente, apresentava a mensagem de erro, mas se eu digitasse o mesmo ingrediente novamente, ele aceitava, não reconhecia que este já existia na lista e incrementava o contador de qualquer forma, passando ao item seguinte. Dessa forma, era possível fazer um array com ['Farinha', 'Ovo', 'Farinha', 'Ovo', 'Ovo'].
Eu percebi que o erro estava no fato de eu não ter quebrado o "for" com "break;", nas linhas 34, 35, porém, não achava que seria necessário, devido à condição do "while()". Queria entender por que o meu raciocínio estava errado, e por que o "break;" é necessário ali. Quero entender como o programa compreende as instruções sem esse "break;" naquela posição, por gentileza.
O código, agora funcional:
<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;
break;
}
}
while (achou == true) {
ingrediente = prompt("Ingrediente já informado, por favor, digite outro ingrediente.");
for (var posicao = 0; posicao < ingredientes.length; posicao++) {
if (ingredientes[posicao] == ingrediente) {
achou = true;
break;
} else if(ingredientes[posicao] != ingrediente){
achou = false;
}
}
}
if (achou == false) {
ingredientes.push(ingrediente);
contador++;
}
}
console.log(ingredientes);
</script>