Validar Login com Set

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