Pesquisa ArrayList?

6 respostas Resolvido
programaçãojava
V

Então preciso que o usuário digite o nome da cidade cadastrada por ele na opção 1 ou a primeira letra da cidade, é o programa mostre apenas a cidade pesquisada com os seus respectivos dados, caso não encontre a cidade apareça uma mensagem que retornara a tela inicial.
Segue abaixo o código, por favor galera se puderem responder o mais rápido eu agradeço.

public class Principal {
    public static void main(String[] args){
        String City, nCidade, nHabitantes, prefeito, vizinhos;
        int x = 0, cont =1;
        int y = 9;
        ArrayList<Estado> cd = new ArrayList <>();
	String nomes = "";

		do {
		City = JOptionPane.showInputDialog(null,"|ESCOLHA A OPÇÃO DESEJADA|" 
				+ "\n1) CADASTRAR CIDADE"
				+ "\n2) MOSTRA CIDADES CADASTRADAS"  
				+ "\n3) PESQUISAR CIDADE"
				+ "\n4) MELHOR ROTA"
				+ "\n5) DIGITE ESC PARA SAIR","|ROTA FELIZ|", JOptionPane.PLAIN_MESSAGE);

		do {
		if(City.toUpperCase().equals("1")){
			Estado entidade = new Estado();
			nCidade = JOptionPane.showInputDialog(null,"NOME DA CIDADE: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setnCidade(nCidade);
			nHabitantes = JOptionPane.showInputDialog(null,"QUANTIDADE DE HABITANTES: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setnHabitantes(Integer.parseInt(nHabitantes));
			prefeito = JOptionPane.showInputDialog(null,"NOME DO PREFEITO: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setPrefeito(prefeito);
			vizinhos = JOptionPane.showInputDialog(null,"VIZINHOS: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setVizinhos(vizinhos);
			cd.add(entidade);
			x = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite qualquer tecla para sair ou 0 para cadastrar outra cidade"));
		}cont++;
		}while ((x==0)&&(cont<=2));

    
        if(City.toUpperCase().equals("2")){
            
            for(Estado nome : cd){
			nomes += nome+"\n";
	    }
	    JOptionPane.showMessageDialog(null, nomes, "TODAS AS CIDADES", JOptionPane.INFORMATION_MESSAGE);
	}
        
        if(City.toUpperCase().equals("3")){
            String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ","PESQUISAR CIDADE", JOptionPane.PLAIN_MESSAGE);
            for(Estado buscas : cd){
                    busca = buscas+"\n";
            }
            
	    JOptionPane.showMessageDialog(null, busca, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
        }
        
        }while (y==9);
    }
}

6 Respostas

Rodrigomarden

Não entendi muito bem a parte da primeira letra da cidade.

Mas a outra basta você fazer um for que vá percorrer o array de cidades e fazer uma comparação com a string que você recebeu por meio do usuário, cidades[i].equals(stringRecebida), Quando essa condição for verdadeira você informa os dados da cidade.

V

No caso eu percorri a arraylist, porém não faço a minima ideia de como fazer essa comparação…

if(City.toUpperCase().equals("3")){
        String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ","PESQUISAR CIDADE", JOptionPane.PLAIN_MESSAGE);
        for (int i = 0; i < cd.size(); ++i) {
            
        }
        
    JOptionPane.showMessageDialog(null, busca, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
    }
Rodrigomarden

Você está gravando tudo dentro de uma lista, certo?

Pra pegar o valor dessa lista basta você fazer isso dentro de um for, cd.get(i)
Você vai estar chamando os objetos de dentro dessa lista um por um

Para pegar o nome da cidade para realizar a comparação você vai fazer o que foi dito acima e pegar o nome da cidade pelo get, cd.get(i).getnCidade();

Agora você já tem o nome da cidade, basta realizar a comparação entre duas string, > cd.get(i).getnCidade().equals(busca);

Coloca isso dentro de um if, e quando forem iguais você exibe as informações daquela cidade.

if(cd.get(i).getnCidade().equals(busca)) {

cd.get(i).getncidade();

cd.get(i).getnHabitantes;

etc…

}
V

Estou quase lá, me ajudou bastante, porém na hora de imprimir a cidade buscada está aparecendo o que digitei na busca e não a cidade com os dados, creio que o erro esteja no JOptionPane.

if(City.toUpperCase().equals("3")){
        String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ","PESQUISAR CIDADE", JOptionPane.PLAIN_MESSAGE);
        for (int i = 0; i < cd.size(); ++i) {
            if(cd.get(i).getnCidade().equals(busca)) {
              cd.get(i).getnCidade();
              cd.get(i).getnHabitantes();
              cd.get(i).getPrefeito();
              cd.get(i).getVizinhos();
        }
        
    JOptionPane.showMessageDialog(null, cd, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
        }
    }
Rodrigomarden
Solucao aceita

Tente assim:

String cidadeBuscada = Não foi encontrada.;

if(City.toUpperCase().equals(3)){

String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ",PESQUISAR CIDADE, JOptionPane.PLAIN_MESSAGE);

for (int i = 0; i < cd.size(); i++) {

if(cd.get(i).getnCidade().equals(busca)) {

cidadeBuscada = (

cd.get(i).getnCidade()+ “\n” +

cd.get(i).getnHabitantes()+ “\n” +

cd.get(i).getPrefeito()+ “\n” +

cd.get(i).getVizinhos()+ “\n”);

}
JOptionPane.showMessageDialog(null, cidadeBuscada, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
    }
}
V

Cara valeu mesmo. Deu certo.

Criado 26 de maio de 2017
Ultima resposta 26 de mai. de 2017
Respostas 6
Participantes 2