4
respostas

Validação de senha - correto?

Olá, o meu código está rodando certinho, mas gostaria de saber se mesmo ele rodando, eu cometi algum erro de boa práticas ou se do jeito que eu fiz está tudo bem.
A seguir o código:

import java.util.Scanner;

public class validacaoDeSenha {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int senha;
System.out.print("Digite a senha: ");
senha = input.nextInt();
if(senha == 123456) {
System.out.println("Acesso permitido!");
}
else {
System.out.println("Acesso Negado!");
}
}
}

4 respostas

Seu código está bom, e neste momento que você está a começar a dar os passos na programação, não tem de se preocupar em errar e saber se o código está 100% seguindo os padrões da linguagem, isso faz parte do aprendizado. Do jeito que está, ele funciona, mas poderiam ser feitas algumas melhorias, por exemplo, na declaração da variável senha, você passa ela em duas linhas, isso pode ser feito inline (uma única linha), assim reduzindo código:

int senha = input.nextInt();

Esta abaixo é opcional, mas você poderia criar uma variável específica para guardar a password para verificação com a senha que seria passada pelo usuário:

final int password = 123456;
if (senha == password)

Mas do jeito que você fez, não deixa de estar certo, ainda mais na condicional if que o == está a comparar os valores das variáveis.

Tenho uma dica para você: sempre, ou quase sempre, que você se deparar com condicionais do tipo if-else apenas como no seu código:

if (senha == password) {
    System.out.println("Acesso permitido!");
} else {
    System.out.println("Acesso Negado!");
}

Você pode passar, no lugar disso, uma operação ternária. Ela é nada mais que um if-else mais semântico, sua sintaxe é condicional ? verdadeiro : falso. O '?' indica um “se sim” e, logo após, vem um valor verdadeiro; o ':' indica “se não” e, logo após, vem um valor falso. Ah, mais uma coisa: sempre que você usar o Scanner, lembre-se de, no final do código, chamar o método .close() para indicar que a operação foi terminada/concluída com êxito e o código poder se encerrar.

Aqui, eu tomei a liberdade de poder refatorar seu código para deixá-lo mais coeso, legível e seguindo boas práticas, que é o que você disse que queria saber se seu código tinha.

import java.util.Scanner;

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

        final int password = 123456;

        System.out.print("Digite a senha: ");
        int senha = input.nextInt();

        System.out.println(senha == password ? "Acesso permitido!" : "Acesso Negado!");
        input.close();
    }
}

Outra forma, voce poderia passar diretamente o input.nextInt() na condicional, desta forma:

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

        final int password = 123456;

        System.out.print("Digite a senha: ");

        System.out.println(input.nextInt() == password ? "Acesso permitido!" : "Acesso Negado!");
        input.close();
    }

Desta forma fica um pouco menos legivel, mas nao deixa de estar certo. Bem, espero te-lo ajudado a sanar suas duvidas com isso.

Olá! Analisei seu código e ele está funcionando perfeitamente para o que se propõe. Do ponto de vista de boas práticas para um código simples como esse, você fez um bom trabalho.

O código é fácil de ler e entender, e isso é o mais importante para quem está começando.

Aqui estão alguns pontos sobre boas práticas que podem te ajudar a evoluir, mas que não são "erros" no seu código atual:

  1. Fechando o Scanner
    Após usar o objeto Scanner, é uma boa prática fechá-lo para liberar os recursos do sistema. Isso evita possíveis problemas, especialmente em programas maiores.

Você pode fazer isso adicionando a linha input.close(); no final do seu método main: public class validacaoDeSenha {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int senha;

    System.out.print("Digite a senha: ");
    senha = input.nextInt();

    if (senha == 123456) {
        System.out.println("Acesso permitido!");
    } else {
        System.out.println("Acesso Negado!");
    }

    // Boa prática: fechar o Scanner
    input.close();
}

}

Boa tarde, tudo bem? Eu estou com um problema ao executar o código. Ele não permite digitar nada no terminal do VS Code. Como resolve isso? O código é este: import java.util.Scanner;

public class ValidacaoSenha {
public static void main(String[] args) {
String senhaCorreta = "123456";
Scanner scanner = new Scanner(System.in);

    System.out.print("Digite a senha: ");  
    String tentativaSenha = scanner.nextLine();  

    scanner.close();  

    if (tentativaSenha.equals(senhaCorreta)) {  
        System.out.println("Acesso permitido!");  
    } else {  
        System.out.println("Acesso negado!");  
    }  
}  

}

Aguardo resposta!

Boa noite Arthur, tudo bem?

A questão é que, por padrão, o terminal que o VS Code usa para executar o código (o Debug Console) não permite entrada de dados (o System.in).

Para resolver isso, você precisa ajustar uma configuração no arquivo de execução do seu projeto. Siga estes passos simples:

No VS Code, abra o arquivo launch.json. Se ele não existir, você pode criá-lo. Normalmente, ele fica dentro da pasta .vscode do seu projeto.

Dentro desse arquivo, encontre a configuração do seu código Java. Você verá uma seção com o nome mainClass.

Adicione a linha "console": "integratedTerminal" (com a vírgula no final da linha de cima) na configuração.

Seu arquivo launch.json deve ficar parecido com este exemplo:
{
"configurations": [
{
"type": "java",
"name": "Launch ValidacaoSenha",
"request": "launch",
"mainClass": "ValidacaoSenha",
"console": "integratedTerminal"
}
]
}

Depois de fazer essa alteração, salve o arquivo e execute seu código novamente. Agora, o VS Code usará o Terminal Integrado, que permite a entrada de dados. Você conseguirá digitar a senha normalmente.

Outra dica é sempre usar o Terminal Integrado do VS Code para executar programas que precisam de entrada de dados. Você pode fazer isso manualmente com o comando java NomeDoArquivo.java (onde NomeDoArquivo.java é o seu arquivo).

Peço que caso esta resposta solucione o teu problema, marque como resolvido ok?