Sempre acreditei que o método main em java é somente para testes, então eu sempre coloco o mínimo de código no mesmo quando é necessário. Ai vai o meu projeto:
//classe usuário basico
package login;
public class User {
private String login;
private String senha;
public User(String login, String senha) {
this.login = login;
this.senha = senha;
}
public boolean validarSenha(String login, String senha) {
return this.login.equals(login) && this.senha.equals(senha);
}
public String getLogin() {
return login;
}
}
//Classe para a autenticação
package login;
import java.util.Scanner;
public class Autentica extends User {
Scanner scanner = new Scanner(System.in);
int tentativasRestantes = 3;
public Autentica(String login, String senha) {
super(login, senha);
}
public void verifica() {
while (tentativasRestantes > 0) {
System.out.println("Digite o seu usuário: ");
String usuario = scanner.nextLine();
System.out.println("Digite a senha: ");
String senha = scanner.nextLine();
if (validarSenha(usuario, senha)) {
System.out.println("Login bem-sucedido!");
break;
} else {
tentativasRestantes--;
if (tentativasRestantes == 0) {
System.out.println("Acesso bloqueado. Contate o administrador.");
} else {
System.out.println("Usuáio ou senha incorreta! Tentativas restantes: " + tentativasRestantes);
}
}
}
scanner.close();
}
}
//classe de execução de testes.
package login;
public class TesteUser {
public static void main(String[] args) {
// TODO Auto-generated method stub
Autentica autentica = new Autentica("Roberto", "123456");
autentica.verifica();
}
}
Também acho mais efetivo o treinamento de encapsulamento usando em classes e pacotes separados para serem testadas todas as regras do encapsulamento.
Obrigado!