Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Essa solução estaria errada ?

const tentativas = ["1234", "admin", "secreto"];
const senhaCorreta = "secreto";

for(let i = 0; i<=tentativas.length - 1; i++){
    if(tentativas[i] !== "secreto"){
        console.log(`Tentativa ${i+1} inválida`)
    } else {
        console.log("Acesso permitido!")
    }

    if(i === 2) {
        console.log("\nAcesso bloqueado. Número máximo de tentativas atingido.")
    } 
}
1 resposta
solução!

Olá, Eduardo. Tudo bem?

Agradeço por compartilhar seu código com a comunidade.

A sua solução não está errada em usar o for, mas do jeito que o código está hoje, a lógica acaba gerando um comportamento incorreto. O principal problema é que o laço não é interrompido quando a senha correta é encontrada, então mesmo após exibir “Acesso permitido!”, o código continua executando e pode acabar mostrando a mensagem de “Acesso bloqueado”, o que não deveria acontecer.

Outro ponto é que a verificação if (i === 2) força a mensagem de bloqueio a aparecer na última iteração, independentemente de o usuário já ter acertado a senha antes.

Usando o seu próprio código, uma correção simples seria controlar o fluxo e interromper o laço quando o acesso for liberado:

const tentativas = ["1234", "admin", "secreto"];
const senhaCorreta = "secreto";

let acessoLiberado = false;

for (let i = 0; i < tentativas.length && i < 3; i++) {
  if (tentativas[i] === senhaCorreta) {
    console.log("Acesso permitido!");
    acessoLiberado = true;
    break;
  } else {
    console.log(`Tentativa ${i + 1} inválida`);
  }
}

if (!acessoLiberado) {
  console.log("Acesso bloqueado. Número máximo de tentativas atingido.");
}

Assim, quando a senha correta é encontrada, o break encerra o laço imediatamente, evitando mensagens indevidas. Esse ajuste deixa seu for funcional e coerente com o objetivo da atividade.

Espero que eu tenha conseguido te ajudar.

Conte com o fórum sempre que precisar.

Abraços e bons estudos!