Dúvida na utlização do metodo contains() em Vector

1 resposta
D

Olá! Estou com o seguinte programa. Creio que o programa esteja certo, contudo, quando o ussuario quer procurar por um nome, não consigo usar o contains para achar esse nome. Ele sempre diz que não existe nenhuma doacao com o nome digitado. Segue aí meu programa:

Classe Principal:

/**Sintese

  • Objetivos: Cadastrar e avaliar doacoes a uma creche.
  • Entradas: Nome, quantidade e codigo do item e selecionador de categoria.
  • Saidas: Lista de avaliacao dos cadastros .
    */

package revisao;

import java.util.Vector;

import dados.DadosAuxiliares;

import dados.Doacoes;

import servicos.Servicos;

import servicos.Validacao;

public class Principal {

public static void main(String[] args) {
	int aux = 1;

	Vector<Doacoes> registro = new Vector<Doacoes>();
	DadosAuxiliares.nomeCreche = Validacao.validaNomeCreche();

	

	do{
		Servicos.limpaTela(5);
		Servicos.apresentarMenu(DadosAuxiliares.nomeCreche);

		switch(Validacao.validaResposta()){

		case 1:
			Servicos.limpaTela(5);
			registro.add(new Doacoes(Validacao.validaNome(aux), Validacao.validaQuantidade(aux), Validacao.validaCodigo(aux, registro)));
			DadosAuxiliares.continua = true;
			break;
		case 2:
			Servicos.apresentarRegistro(registro, DadosAuxiliares.nomeCreche);
			DadosAuxiliares.continua = true;
			break;
		case 3:
			Servicos.consultarRegistro(registro, DadosAuxiliares.nomeCreche);
			DadosAuxiliares.continua = true;
			break;
		default:

			if(registro.isEmpty()){
				Servicos.encerrarVazio();
				DadosAuxiliares.continua = true;
			}
			else{
				Servicos.encerrar(registro);
				DadosAuxiliares.continua = false;
			}
		}
		
		aux++;
	}while(DadosAuxiliares.continua);


}

}

Classe Servicos:

package servicos;

import java.util.Vector;

import dados.Doacoes;

public class Servicos {

public static void limpaTela(int aux) {
	for(int auxiliar = 0 ; auxiliar < aux ; auxiliar++)
		System.out.println(" ");
}


public static void apresentarMenu(String nomeCreche) {
	System.out.println("\t\t\tCreche " + nomeCreche);
	System.out.println("Digite o numero a esquerda da opcao que deseja escolher");
	System.out.println("1 - Nova doacao\n2 - Mostrar todas as doacoes\n3 - Consultar por nome do conteudo doado\n0 - Terminar");				
}


public static void apresentarRegistro(Vector<Doacoes> registro, String nomeCreche){
	if(registro.isEmpty()){
		limpaTela(5);
		System.out.println("Nao foi realizado nenhum registro.");
	}
	else{
		Servicos.limpaTela(5);
		System.out.println("\t\t\tCreche " + nomeCreche);
		System.out.println("\t\tCodigo\t\tNome\t\tQuantidade");
		for(int aux = 0 ; aux < registro.size() ; aux++){
			System.out.println(aux+1 + " - \t\t" + registro.get(aux).getCodigo() + "\t\t" + registro.get(aux).getNome() + "\t\t" + registro.get(aux).getQuantidade());
		}
	}
}


public static void consultarRegistro(Vector<Doacoes> registro, String nomeCreche) {
	String palavraAux;

	System.out.println("Digite o nome pelo qual deseja consultar");

	palavraAux = Leitura.lerString();

	if(registro.isEmpty()){
		limpaTela(5);
		System.out.println("Nao foi realizado nenhum registro.");
	}
	else if(registro.contains(palavraAux)){
		limpaTela(5);
		System.out.println("Creche " + nomeCreche);
		System.out.println("\t\tCodigo\t\tNome\t\tQuantidade");
		for(int aux = 0 ; aux < registro.size() ; aux++){
			if (registro.get(aux).getNome().equals(palavraAux))
				System.out.println(aux+1 + " - \t\t" + registro.get(aux).getCodigo() + "\t\t" + registro.get(aux).getNome() + "\t\t" + registro.get(aux).getQuantidade());
		}
	}
	else{
		limpaTela(5);
		System.out.println("Nao foi cadastrada nenhuma doacao com esse nome");
	}
}


public static void encerrar(Vector<Doacoes> registro) {
	int totalDoacoesAux = 0;

	for(int aux = 0 ; aux < registro.size() ; aux++){
		totalDoacoesAux += registro.get(aux).getQuantidade();
	}
	Servicos.limpaTela(5);
	System.out.println("Total de Doacoes = " + totalDoacoesAux );
}


public static void encerrarVazio() {
	Servicos.limpaTela(5);
	System.out.println("Nao e possivel encerrar sem registrar ao menos uma doacao. Selecione outra opcao!");		
}

}

Classe Doacoes:

package dados;

public class Doacoes {

private String nome;
private int quantidade;
private int codigo;


public Doacoes(String nome, int quantidade, int codigo) {
	this.nome = nome;
	this.quantidade = quantidade;
	this.codigo = codigo;
}


public String getNome() {
	return nome;
}


public int getQuantidade() {
	return quantidade;
}


public int getCodigo() {
	return codigo;
}

}

Acho que as demais classes são desnecessárias para a duvida, mas caso queiram, só pedir. É um projeto para faculdade. Agradeço a ajuda.

1 Resposta

D

Olá

Acredito q palavraAux é String e o vetor tem como generics o tipo Doacoes. Como são tipos diferentes, nunca terá um valor para palavraAux que esteja dentro do vetor.

Não recomendo q use o contains

  • crie um metodo obterRegistro(Registro, Palavra) que retorna um Doacoesdentro do metodo

  • crie um loop, de 0 até o ultimo registro

  • dentro do loop, se encontrar um Doacoes com o mesmo nome, return registro.get(i)

  • depois do loop coloque um return null caso não encontre Doacoes

  • depois:

    Doacoes doacoes = obterRegistro(registro, palavraAux);
    
    if (doacoes == null) {
    
    // não encontrou registro
    
    } else {
    
    // encontrou registro
    
    }
    

O contains usa o equals para fazer a busca, caso ainda queira usar o contains

  • Na classe Doacoes, sobrescreva os métodos equals e hashcode (pesquise)

  • Depois

    palavraAux = Leitura.lerString();
    
    Doacoes doacoes = new Doacoes(palavraAux, -1, -1); // pode ser qualquer valor exceto o palavraAux
    
    /** codigo **/
    
    else if(registro.contains(doacoes)){
    
Criado 16 de abril de 2016
Ultima resposta 16 de abr. de 2016
Respostas 1
Participantes 2