Fala comunidade!
Estou dando uma estudada em Java e construindo um programinha de locadora.
Gostaria de saber como faço para validar o login com o Hashset. Veja o código abaixo:
`package br.com.locatorius.classes;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class CadastroDeClientes {
private String nome;
private String sobrenome;
private String endereco;
private String login;
Scanner entrada = new Scanner(System.in);
Set<String> logins = new HashSet<String>();
public void cadastraClientes() {
System.out.println("----------------------------------");
System.out.print("Nome: ");
String nome = entrada.nextLine();
this.setNome(nome);
System.out.print("Sobrenome: ");
String sobrenome = entrada.nextLine();
this.setSobrenome(sobrenome);
System.out.print("Endereço: ");
String endereco = entrada.nextLine();
this.setEndereco(endereco);
System.out.print("Login: ");
String login = this.loginDeUsuarios();
this.setLogin(login);
}
public String loginDeUsuarios() {
String nome = null;
while (!(nome.equals(logins))) {
nome = entrada.nextLine();
if (nome.equals(logins)) {
System.out.println("Já existe esse login. Escolha outro por favor!");
} else {
logins.add(nome);
}
}
return nome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
}
`
Eu ainda tentei jogar este login para outra classe assumir a responsabilidade. Veja:
` package br.com.locatorius.classes;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class LoginDeUsuario {
String login;
Scanner entrada = new Scanner(System.in);
Set<String> logins = new HashSet<String>();
public String propagaLogin() {
int achaLogin = 0;
while (achaLogin >= 0) {
this.login = entrada.nextLine();
if (logins.contains(this.login)) {
System.out.println("Já existe esse login. Escolha outro por favor!");
achaLogin = 0;
} else {
logins.add(this.login);
achaLogin = -1;
break;
}
}
return this.login;
}
}
`
Bem, não consegui entender o seu problema, então fiz algo para melhorar o seu código, segue as classes
public class Login {
private String nome;
private String senha;
public Login() {}
public Login(String nome,String senha) {
this.nome = nome;
this.senha = senha;
}
public String getNome() {
return nome;
}
public String getSenha() {
return senha;
}
@Override
public boolean equals(Object obj) {
Login login = (Login) obj;
return this.nome.equals(login.nome) && senha.equals(login.senha);
}
@Override
public int hashCode() {
return senha.hashCode();
}
public class LogaSistema {
private Set<Login> sets = new HashSet<>();
private Login usuarioLogado;
public LogaSistema() {
sets.addAll(Arrays.asList(new Login("adm","123")));
}
public boolean loga(Login login) {
boolean isLogado = sets.contains(login);
if(isLogado)
this.usuarioLogado = login;
return isLogado;
}
public Login getUsuarioLogado() {
return usuarioLogado;
}
}
public class Teste {
public static void main(String[] args) {
LogaSistema logaSistema = new LogaSistema();
// com o certo
System.out.println(logaSistema.loga(new Login("adm","123"))? "Logou" :"Não Logou");
//com errado
System.out.println(logaSistema.loga(new Login("ad","123"))? "Logou" :"Não Logou");
}
}
Não é interessante você misturar elementos de entrada (Scanner) com a sua classe de negócios (Login, LogaSistema), espero que você observe esse exemplo.
Abraço
Fala Edu!!!
Obrigado pela resposta!
Esse sistema é ainda mais simples que isso!
É uma locadora de filmes onde no cadastro do cliente vou precisar propagar um login. Funcionará como uma chave para o cliente esse mesmo login.
Naquele algoritmo lá em cima, tento adicionar o login em um loop while. Mas enquanto ele acha o login com o mesmo nome ele gera uma informação mediante a existência daquele login.
1 curtida
Certo amigo, tenho alguns pontos para ressalta :
Uma característica usada pela interface Set
, ela não aceita elementos duplicados, mas para isso é necessário que você implementa na sua classe Login
o métodos hashCode
e equals
.
O método add
da Interface Set
retorna um boolean afirmando se inseriu ou não o elemento .
Também usei a recursividade.
Veja a implementação
public class Teste {
private LogaSistema logaSistema = new LogaSistema();
public static void main(String[] args) {
Teste teste = new Teste();
teste.cadastraClientes();
teste.logaSistema.mostraRegistros();
}
public void cadastraClientes() {
Scanner entrada = new Scanner(System.in);
Login login = new Login();
System.out.println("----------------------------------");
System.out.print("Nome ");
login.setNome(entrada.next());
System.out.print("Sobrenome: ");
login.setSobrenome(entrada.next());
System.out.print("Endereço: ");
login.setEndereco(entrada.next());
System.out.print("Login: ");
login.setSenha(entrada.next());
if (!logaSistema.adiciona(login)){
cadastraClientes();
}
entrada.close();
}
}
public class LogaSistema {
//Aqui Metodos e Atributos anteriores
public boolean adiciona(Login login){
return sets.add(login);
}
public void mostraRegistros() {
for (Login login : sets) {
System.out.println(login);
}
}
Espero ter ajudado
1 curtida