Não consigo implementar filtros em arrayList - preciso de ajuda!

12 respostas
G

Olá pessoal, sou novo aqui e vim aqui porque to quebrando a cabeça e preciso de ajuda.
Estou tentando criar um programinha básico que tem 2 opções, a primeira é cadastrar curriculum de candidatos, e a segunda é a parte em que tenho que emplementar filtros pra pocurar por eles.

São quatro classes mais o main, sem uso de herança, nem interface, ai vão elas:
Classe Candidato

public class Candidato {
	private String nome, sexo, endereço;
	private int contato;
	private double salarioPretendido;
	
	private ArrayList<AreaPretendida> listaAreas = new ArrayList<AreaPretendida>();
	private ArrayList<EmpregosAnteriores> listaEmpregos = new ArrayList<EmpregosAnteriores>();
	private ArrayList<Formacao> listaFormacao = new ArrayList<Formacao>();
	private ArrayList<Candidato> listaCandidatos = new ArrayList<Candidato>();
	
	
	
	public Candidato(String nome,String sexo, String endereco, int contato, double salarioPretendido){
		this.nome = nome;
		this.sexo = sexo;
		this.endereço = endereco;
		this.contato = contato;
		this.salarioPretendido = salarioPretendido;
	}
	
	public Candidato(){
		this.nome = "";
		this.sexo = "";
		this.endereço = "";
		this.contato = 0;
		this.salarioPretendido = 0;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getEndereço() {
		return endereço;
	}

	public void setEndereço(String endereço) {
		this.endereço = endereço;
	}

	public int getContato() {
		return contato;
	}

	public void setContato(int contato) {
		this.contato = contato;
	}	
	
	public double getSalarioPretendido() {
		return salarioPretendido;
	}

	public void setSalarioPretendido(double salarioPretendido) {
		this.salarioPretendido = salarioPretendido;
	}

	public ArrayList<AreaPretendida> getListaAreas() {
		return listaAreas;
	}

	public void setListaAreas(ArrayList<AreaPretendida> listaAreas) {
		this.listaAreas = listaAreas;
	}

	public ArrayList<EmpregosAnteriores> getListaEmpregos() {
		return listaEmpregos;
	}

	public void setListaEmpregos(ArrayList<EmpregosAnteriores> listaEmpregos) {
		this.listaEmpregos = listaEmpregos;
	}

	public ArrayList<Formacao> getListaFormacao() {
		return listaFormacao;
	}

	public void setListaFormacao(ArrayList<Formacao> listaFormacao) {
		this.listaFormacao = listaFormacao;
	}
	

	public ArrayList<Candidato> getListaCandidatos() {
		return listaCandidatos;
	}

	public void setListaCandidatos(ArrayList<Candidato> listaCandidatos) {
		this.listaCandidatos = listaCandidatos;
	}

	public String toString(){
		return nome+"\n"+
		sexo+"\n"+
		endereço+"\n"+
		contato+"\n"+
		salarioPretendido;
		
	}

}

Classe Area pretendida

public class AreaPretendida {
	private String areaPretendida;
	
	public String getAreaPretendida() {
		return areaPretendida;
	}

	public void setAreaPretendida(String areaPretendida) {
		this.areaPretendida = areaPretendida;
	}

	
	public void cadastraArea(){
		
		String msg =" Escolha a(s) area(s) pretendidas: \n\n"+
		"1 - Administração\n"+
		"2 - Serviços gerais\n"+
		"3 - Secretariado\n"+
		"4 - Educação\n"+
		"5 - Programação\n"+
		"6 - Outra\n"+
		"0 - Sair";
		
		int op;
			op = Integer.parseInt(JOptionPane.showInputDialog(msg));
			switch(op){
			case 1:
				areaPretendida = "Administração";
				break;
			case 2:
				areaPretendida = "Serviços gerais";
				break;
			case 3:
				areaPretendida = "Secretariado";
				break;
			case 4:
				areaPretendida = "Educação";
				break;
			case 5:
				areaPretendida = "Programação";
				break;
			case 6:
				areaPretendida = JOptionPane.showInputDialog("Qual outra area: ");
				
			}
	}
	
	
	
	
}

Classe EmpregosAnteriores

public class EmpregosAnteriores {
	private String empresa, cargo, motivoSaida;
	private double salario;
	
	
	public void EmpresaAnteiores(String empresa, String cargo, String motivoSaida, double salario){
		this.empresa = empresa;
		this.cargo = cargo;
		this.motivoSaida = motivoSaida;
		this.salario = salario;
	}
	
	public void EmpresaAnteriores(){
		this.empresa = "";
		this.cargo = "";
		this.motivoSaida = "";
		this.salario = 0;
		
		
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public String getMotivoSaida() {
		return motivoSaida;
	}

	public void setMotivoSaida(String motivoSaida) {
		this.motivoSaida = motivoSaida;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}
	
	public String toString(){
		return empresa+"\n"+cargo+"\n"+motivoSaida+"\n"+salario;
	}
	

}

Classe Formacao

public class Formacao {
	private String ensinoMedio, ensinoSuperior;
	private ArrayList<String> listaCursos = new ArrayList<String>();

	public Formacao(String ensinoMedio, String ensinoSuperior, ArrayList<String> listaCursos) {
		this.ensinoMedio = ensinoMedio;
		this.ensinoSuperior = ensinoSuperior;
		this.listaCursos = listaCursos;
	}
	
	public Formacao(){
		this.ensinoMedio = "";
		this.ensinoSuperior = "";
		this.listaCursos = new ArrayList<String>();
	}

	public String getEnsinoMedio() {
		return ensinoMedio;
	}

	public void setEnsinoMedio(String ensinoMedio) {
		this.ensinoMedio = ensinoMedio;
	}

	public String getEnsinoSuperior() {
		return ensinoSuperior;
	}

	public void setEnsinoSuperior(String ensinoSuperior) {
		this.ensinoSuperior = ensinoSuperior;
	}

	public ArrayList<String> getListaCursos() {
		return listaCursos;
	}

	public void setListaCursos(ArrayList<String> listaCursos) {
		this.listaCursos = listaCursos;
	}

	
	
	public String toString(){
		return ensinoMedio+"\n"+ensinoSuperior+"\n"+listaCursos;
	}
	
	
	

	
	
	
	

}

Class Principal

public class Principal {
	
	public static void main(String[] args) {
		
		String msg = "Bem vindos ao  Banco de Talentos.\n\n"+
		"Por favor, o que deseja fazer:\n"+
		"1 - Cadastrar funcionário.\n"+
		"2 - Área administrativa\n"+
		"3 - Encerrar o programa";
		
		int op;
		do{
			op = Integer.parseInt(JOptionPane.showInputDialog(msg));
			switch (op){
			case 1:
				Candidato c = new Candidato();
				c.setNome(JOptionPane.showInputDialog("Nome candidato: "));
				c.setEndereço(JOptionPane.showInputDialog("Endereço candidato: "));
				c.setContato(Integer.parseInt(JOptionPane.showInputDialog("Telefone candidato: ")));
				c.setSalarioPretendido(Integer.parseInt(JOptionPane.showInputDialog("Salario pretendido: ")));
				c.getListaCandidatos().add(c);
				
				
				AreaPretendida a = new AreaPretendida();
				int esc1 = Integer.parseInt(JOptionPane.showInputDialog("Quantas areas você pretende atuar: "));
				for(int i=1; i<= esc1; i++){
				a.cadastraArea();
				c.getListaAreas().add(a);
				}
				
				EmpregosAnteriores e = new EmpregosAnteriores();
				int esc2 = Integer.parseInt(JOptionPane.showInputDialog("Quantos empregos ja teve: "));
				for(int i=1; i<= esc2; i++){
				e.setEmpresa(JOptionPane.showInputDialog("Informe antiga empresa: "));
				e.setCargo(JOptionPane.showInputDialog("Cargo antigo: "));
				e.setMotivoSaida(JOptionPane.showInputDialog("Motivo da saida: "));
				e.setSalario(Integer.parseInt(JOptionPane.showInputDialog("Salario antigo: ")));
				c.getListaEmpregos().add(e);
				}
				
				Formacao f = new Formacao();
				f.setEnsinoMedio(JOptionPane.showInputDialog("Possui ensino médio s/n?"));
				f.setEnsinoSuperior(JOptionPane.showInputDialog("Possui insino superior? s/n"));
				int p = Integer.parseInt(JOptionPane.showInputDialog("Possui quantos cursos?"));
				for(int i=1; i<=p;i++){
					if(p==1){
						f.getListaCursos().add(JOptionPane.showInputDialog("Qual curso: "));
					}else
						f.getListaCursos().add(JOptionPane.showInputDialog("Informe "+(i)+"º curso: "));
				
				}
				c.getListaFormacao().add(f);
				break;
			case 2:
				String mssg = "Escolha uma das seguintes opções: \n\n"+
				"Listar candidatos por: \n"+
				"1 - Por nome\n"+
				"2 - Por sexo\n"+
				"3 - Por área pretendida\n"+
				"4 - Por salário pretendida\n"+
				"5 - Por cursos\n"+
				"6 - Que possuem ensino médio\n"+
				"7 - Que possuem ensino superior\n"+
				"8 - Empregos anteriores\n"+
				"9 - Por empresa\n"+
				"10 - Por cargo\n"+
				"0 - Sair";
				
				int op2;
				do{
				op2 = Integer.parseInt(JOptionPane.showInputDialog(mssg));
				switch (op2){
				case 1:
					 //NÃO ESTOU CONSEGUINDO DESENVOLVER ESSA PARTE
					String mmsg1 = "Nomes\n\n";
					for(int i; i < c.getListaCandidatos().size(); i++){
						JOptionPane.showMessageDialog(null, mmsg1);
					}
					break;
				case 2:
					
					break;
				case 3:
					//for(AreaPretendida ar : 
				case 10:
					break;
					
				}
				}while(op2 != 0);
			}
		}while(op != 3);
		
		
		
		
	}

}

Por favor, espero que possam me ajudar.
Desde já agradeço.

12 Respostas

L

Fala ai fera,
qual a sua duvida?

G

Minha duvida é como fazer os filtros para varrer o os ArrayLists de acordo com cada “case” deste String de opção:

String mssg = “Escolha uma das seguintes opções: \n\n”+

“Listar candidatos por: \n”+

“1 - Por nome\n”+

“2 - Por sexo\n”+

“3 - Por área pretendida\n”+

“4 - Por salário pretendida\n”+

“5 - Por cursos\n”+

“6 - Que possuem ensino médio\n”+

“7 - Que possuem ensino superior\n”+

“8 - Empregos anteriores\n”+

“9 - Por empresa\n”+

“10 - Por cargo\n”+

“0 - Sair”;

Caso o usuario escolher listar os curriculum por nome eu teria que varrer o ArrayList de candidato “listaCandidatos” para pegar todos os nomes não é? e como fazer isso? sendo que essa é só meu primeiro case.

Espero que possam me entender
vlw

L

Cara, uma coisa que eu vi e que na minha opiniao nao é necessario é um ArrayList de Candidatos dentro de Candidatos. Esta array deveria estar dentro da sua classe Principal. É que eu penso assim: como um candidato vai ter uma lista de candidatos? Sacou?
Apartir dai fica mais facil entender (eu acho).
Quando voce tiver com o array preenchido, é so voce fazer um loop dentro da sua array para cada caso. Por exemplo:
onde vc quer que busque os nomes voce so precisa colocar o seu arrayCandidato.getnome.

Sacou a ideia fera?

Sou iniciante tambem, mas estamos ai para aprender juntos.
Abraço nego…

G

cara como eu faço esse loop, e não te arrayCanditado.getNome, nao to conseguindo fazer NADA ainda, tem como voce fazer um exmplo pra mim?
abraço

L

dentro do seu loop vc so precisa colocar o seu arrayCandidato.get(index).getNome. Este index é a posição do candidato dentro do seu array. Faça um “for” de 0 até o tamanho do array, dentro do “for” vc coloca o seu array.get(index).getnome.

Sacou? tenta ai… se nao conseguir te dou exemplo do codigo…

G

cara to tendo um dia de cachorro, minha net ta caindo sempre, e só volta de 15 em 15 minus e só fica estável por uns 30 segundos, pra ti ter uma noção eu to escrevendo minhas dúvidas no bloco de notas e colando aqui no forum pra ve se sai algo,
e o pior que esse trabalho é pra inicil da semana que vem, com javadock e apresentação em ppt…
fiz o arraList de candidato dentro do main como fui dito, mais dai da erro na hora de add as informações no array, vo postar as duas classes que eu modifiquei como tu pedio no array, o resto continua igua, eu nao apaguei o array antigo, só comentei ele, se possivel cola tudo ai no teu eclipse e ve o que eu to errando.
e nao consegui fazer nada de novo cara, unica coisa que eu sei que o “for” é ate o c.getListaCandidatos().size(); e que tambem da erro, se tu conseguir me ajuda nisso vo fica te devendo essa brother!
abraço

Class Candidato

public class Candidato {
	private String nome, sexo, endereço;
	private int contato;
	private double salarioPretendido;
	
	private ArrayList<AreaPretendida> listaAreas = new ArrayList<AreaPretendida>();
	private ArrayList<EmpregosAnteriores> listaEmpregos = new ArrayList<EmpregosAnteriores>();
	private ArrayList<Formacao> listaFormacao = new ArrayList<Formacao>();
	//private ArrayList<Candidato> listaCandidatos = new ArrayList<Candidato>();
	
	
	
	public Candidato(String nome,String sexo, String endereco, int contato, double salarioPretendido){
		this.nome = nome;
		this.sexo = sexo;
		this.endereço = endereco;
		this.contato = contato;
		this.salarioPretendido = salarioPretendido;
	}
	
	public Candidato(){
		this.nome = "";
		this.sexo = "";
		this.endereço = "";
		this.contato = 0;
		this.salarioPretendido = 0;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getEndereço() {
		return endereço;
	}

	public void setEndereço(String endereço) {
		this.endereço = endereço;
	}

	public int getContato() {
		return contato;
	}

	public void setContato(int contato) {
		this.contato = contato;
	}	
	
	public double getSalarioPretendido() {
		return salarioPretendido;
	}

	public void setSalarioPretendido(double salarioPretendido) {
		this.salarioPretendido = salarioPretendido;
	}

	public ArrayList<AreaPretendida> getListaAreas() {
		return listaAreas;
	}

	public void setListaAreas(ArrayList<AreaPretendida> listaAreas) {
		this.listaAreas = listaAreas;
	}

	public ArrayList<EmpregosAnteriores> getListaEmpregos() {
		return listaEmpregos;
	}

	public void setListaEmpregos(ArrayList<EmpregosAnteriores> listaEmpregos) {
		this.listaEmpregos = listaEmpregos;
	}

	public ArrayList<Formacao> getListaFormacao() {
		return listaFormacao;
	}

	public void setListaFormacao(ArrayList<Formacao> listaFormacao) {
		this.listaFormacao = listaFormacao;
	}
	

	//public ArrayList<Candidato> getListaCandidatos() {
	//	return listaCandidatos;
	//}

	//public void setListaCandidatos(ArrayList<Candidato> listaCandidatos) {
	//	this.listaCandidatos = listaCandidatos;
	//}

	public String toString(){
		return nome+"\n"+
		sexo+"\n"+
		endereço+"\n"+
		contato+"\n"+
		salarioPretendido;
		
	}

}

Class Principal

public class Principal {
	private ArrayList<Candidato> listaCandidatos = new ArrayList<Candidato>();
	
	
	public ArrayList<Candidato> getListaCandidatos() {
		return listaCandidatos;
	}


	public void setListaCandidatos(ArrayList<Candidato> listaCandidatos) {
		this.listaCandidatos = listaCandidatos;
	}


	public static void main(String[] args) {
		
		String msg = "Bem vindos ao  Banco de Talentos.\n\n"+
		"Por favor, o que deseja fazer:\n"+
		"1 - Cadastrar funcionário.\n"+
		"2 - Área administrativa\n"+
		"3 - Encerrar o programa";
		
		int op;
		do{
			op = Integer.parseInt(JOptionPane.showInputDialog(msg));
			switch (op){
			case 1:
				Candidato c = new Candidato();
				c.setNome(JOptionPane.showInputDialog("Nome candidato: "));
				c.setEndereço(JOptionPane.showInputDialog("Endereço candidato: "));
				c.setContato(Integer.parseInt(JOptionPane.showInputDialog("Telefone candidato: ")));
				c.setSalarioPretendido(Integer.parseInt(JOptionPane.showInputDialog("Salario pretendido: ")));
				c.getListaCandidatos().add(c);
				//AQUI APARECE O ERRO CRIANDO O ARRAY DE CANDIDATO NO MAIN, MESMO CRIANDO GETS E SETS.
				
				
				AreaPretendida a = new AreaPretendida();
				int esc1 = Integer.parseInt(JOptionPane.showInputDialog("Quantas areas você pretende atuar: "));
				for(int i=1; i<= esc1; i++){
				a.cadastraArea();
				c.getListaAreas().add(a);
				}
				
				EmpregosAnteriores e = new EmpregosAnteriores();
				int esc2 = Integer.parseInt(JOptionPane.showInputDialog("Quantos empregos ja teve: "));
				for(int i=1; i<= esc2; i++){
				e.setEmpresa(JOptionPane.showInputDialog("Informe antiga empresa: "));
				e.setCargo(JOptionPane.showInputDialog("Cargo antigo: "));
				e.setMotivoSaida(JOptionPane.showInputDialog("Motivo da saida: "));
				e.setSalario(Integer.parseInt(JOptionPane.showInputDialog("Salario antigo: ")));
				c.getListaEmpregos().add(e);
				}
				
				Formacao f = new Formacao();
				f.setEnsinoMedio(JOptionPane.showInputDialog("Possui ensino médio s/n?"));
				f.setEnsinoSuperior(JOptionPane.showInputDialog("Possui insino superior? s/n"));
				int p = Integer.parseInt(JOptionPane.showInputDialog("Possui quantos cursos?"));
				for(int i=1; i<=p;i++){
					if(p==1){
						f.getListaCursos().add(JOptionPane.showInputDialog("Qual curso: "));
					}else
						f.getListaCursos().add(JOptionPane.showInputDialog("Informe "+(i)+"º curso: "));
				
				}
				c.getListaFormacao().add(f);
				break;
			case 2:
				String mssg = "Escolha uma das seguintes opções: \n\n"+
				"Listar candidatos por: \n"+
				"1 - Por nome\n"+
				"2 - Por sexo\n"+
				"3 - Por área pretendida\n"+
				"4 - Por salário pretendida\n"+
				"5 - Por cursos\n"+
				"6 - Que possuem ensino médio\n"+
				"7 - Que possuem ensino superior\n"+
				"8 - Empregos anteriores\n"+
				"9 - Por empresa\n"+
				"10 - Por cargo\n"+
				"0 - Sair";
				
				int op2;
				do{
				op2 = Integer.parseInt(JOptionPane.showInputDialog(mssg));
				switch (op2){
				case 1:
					//Se puder me ensinar varrer esse array e imprimir os nome vai audar muito,
					//axo que dai pelo menos pego algum raciocinio =S
					break;
				case 2:
					break;
				case 3:
					break;
				case 4 :
					break;
				case 5 :
					break;
				case 6 :
					break;
				case 7 :
					break;
				case 8 :
					break;
				case 9 :
					break;
				case 10:
					break;
				}
				}while(op2 != 0);
			}
		}while(op != 3);
		
		
		
		
	}

}
L

A sua ideia na esta toda erra, mas o que acontece é que vc nao esta usando a sua lista de candidados. Primeiro vc tem que povoar sua lista. Isto vc fez certo dentro da classe Principal mas o que esta errado é o c.getListaCandidatos().add©, aqui tem que ser a lista que vc criou na classe, listaCandidados.add©. Dai sua lista tera o primeira candidato. E assim por diante. Tenta ai depois vemos o que deu…

G

Sim eu entendo que tem que ter valores dentro do Array pra vare-lo depois, mais usando essa sintaxe “listaCandidados.add©” na classe principal da erro, o ArrayList está declarado como private, feito gets e sets eu estou usando o conceito de encapsulamento e sem usar o get não seria possivel adicionar não é?
Cara se eu postei algo aqui é porque eu to com dificuldade mesmo, não sei se eu to me expressando mau, não quero tomar tempo de ninguem, mais se voce poder ser mais claro eu ficaria grato.
abraços

L
ArrayList<Cliente> clienteList = new ArrayList<Cliente>();//cria array
		Cliente c = new Cliente();//cria cliente
		c.setNome("lonnewolf");//seta o nome cliente e telefone
		c.setTelefone("123");
		
		clienteList.add(c);//adiciona o cliente a lista
		System.out.println(clienteList.get(0).getNome());//retorna o cliente da lista da posição 0

Segue um exemplo do que deve estar dentro da sua classe principal para preencher o array e para pegar devolta a informação.

G

Fiz tudo o que você me pediu e tentei de outras formas, e nada é imprimido, qual será o problema, o Array, o toString…
realmente não sei o que fazer, este trabalho é pra amanhã e eu to estacionado nesse ponto.

switch (op2){
				case 1:
				   for(int i = 0; i < listaCandidatos.size(); i++){
					JOptionPane.showMessageDialog(null, listaCandidatos.get(i).getNome());
					}
					break;
public String toString(){
		return "Lista candidatos: "+listaCandidatos;
	}
L

Velhinho, esta tudo certinho, quando vc chama seu JOptionPane ele nao traz tela a tela os nomes dos candidatos? Este toString vc pode esquecer, nao vi utilidade para ele. Se vc puder explicar para que vc quer ele, seria melhor…

G

Opa brother, pois então, de maneira alguma o resultado é imprimido na tela com JOption, eu to ficando com medo de não dar tempo de entregar esse trabalho já =S
E sobre o toString, é regra que o professor impôs, todas as classes deve ter 2 construtores, gets e sets e toString, caso não tenham eu perco pontos nesse meu trabalho final.

Se você quiser eu upo o meu projeto em .rar pra ti ver se não é só aqui o problema.

Abraços

Criado 16 de junho de 2010
Ultima resposta 21 de jun. de 2010
Respostas 12
Participantes 2