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

[Dúvida] MONITORAMENTO DE TENTATIVAS DE LOGIN

Olá comunidade, tudo bem? Ao chegar nessa atividade, fiz de uma maneira diferente, queria saber se essa maneira também é viável?

package lacosDeRepeticao;

import java.util.Scanner;

public class ContagemDeLogin {

    //Leonardo trabalha no setor de segurança de um sistema bancário e precisa garantir que os usuários tenham um número limitado de tentativas para inserir a senha corretamente. Se o usuário errar a senha 3 vezes seguidas, sua conta deve ser bloqueada temporariamente.
    //
    //Com base nesse cenário, crie um programa que peça uma senha ao usuário e permita até 3 tentativas de erro antes de bloquear o acesso. Se o usuário digitar corretamente antes disso, o sistema deve conceder o acesso imediatamente.

    public static void main(String[] args) {

        Scanner leitor = new Scanner(System.in);

        int senha = 1234;
        int contador = 3;



        System.out.println("Digite a senha: ");
        int senhaDigitada = leitor.nextInt();

        if (senha == senhaDigitada) {
            System.out.println("Senha Correta! Acesso concedido!\n");
        } else {
            System.out.println("senha incorreta");
            for (int i = 0; i < 3; i++) {
                System.out.println("Digite a senha: ");
                 senhaDigitada = leitor.nextInt();

                if (senha == senhaDigitada) {
                    System.out.println("Senha Correta! Acesso concedido!\n");
                    i  = 3;
                } else {
                    contador--;
                    System.out.println("Senha incorreta! Acesso negado!\n");
                    System.out.println("Voce tem mais " + contador + " tentativas");
                }

            }

            leitor.close();
        }






    }
}
1 resposta
solução!

Oii, Murilo.

Parabéns pela iniciativa de tentar criar sua própria lógica antes de olhar o gabarito. Isso é fundamental pra desenvolver o raciocínio de programador.

Sobre a sua dúvida: o seu código funciona, mas tecnicamente ele não tá seguindo exatamente a regra de "3 tentativas" e possui repetição de código que podemos melhorar.

Vou pontuar três detalhes importantes:

1. A contagem de tentativas (O bug lógico)
Observe que você pede a senha uma vez fora do else (primeira tentativa). Se o usuário errar, ele entra no for que roda mais 3 vezes.
Isso significa que, na prática, você está dando 4 chances ao usuário (1 fora + 3 dentro), e não 3 como o exercício pede.

2. Repetição de código (DRY - Don't Repeat Yourself)
Você escreveu as linhas de "Digite a senha" e a leitura do scanner duas vezes (uma fora e uma dentro do laço). O ideal é colocar tudo dentro da estrutura de repetição para escrever o código apenas uma vez.

3. Controle do loop (break vs i = 3)
Quando o usuário acerta a senha dentro do loop, você usou i = 3 para forçar a saída. Embora funcione, a boa prática em Java é utilizar a palavra-chave break. Ela serve exatamente para isso: "quebrar" o laço imediatamente e continuar o programa. É mais legível para quem está lendo seu código.

Uma sugestão de como ajustar o seu código mantendo sua ideia original, mas corrigindo a quantidade de tentativas e usando o break:

import java.util.Scanner;

public class ContagemDeLogin {
    public static void main(String[] args) {
        Scanner leitor = new Scanner(System.in);

        int senhaCorreta = 1234;
        // ajustamos para 3 tentativas totais
        int totalTentativas = 3; 

        for (int i = 0; i < totalTentativas; i++) {
            System.out.print("Digite a senha: ");
            int senhaDigitada = leitor.nextInt();

            if (senhaDigitada == senhaCorreta) {
                System.out.println("Senha Correta! Acesso concedido!");
                // o break encerra o loop imediatamente
                break; 
            } else {
                // cálculo de quantas chances sobram
                int restantes = (totalTentativas - 1) - i;
                
                if (restantes > 0) {
                    System.out.println("Senha incorreta! Você tem mais " + restantes + " tentativa(s).");
                } else {
                    System.out.println("Senha incorreta! Conta bloqueada.");
                }
            }
        }
        leitor.close();
    }
}

Dessa forma, o código fica mais limpo, sem repetições e com a contagem exata.

Continue testando novas formas, é assim que se aprende.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!