Método de busca em java

Olá pessoal, sou novo aqui e preciso de uma ajuda, creio que é um erro simples, mas eu não estou conseguindo encontrar. Meu professor disse que eu preciso criar um método para buscar somente um carro, o método que eu to usando esta listando todos os carros, mas eu não entendi como fazer, sei que é bem ridículo mas quem puder me ajudar !

Minha servlet no package controller:

        Carro carro = new Carro();
	carro.setPlaca(request.getParameter("campoPlaca"));
	
	if(ExeDAO.verificPlaca(carro)){
		System.out.println("Carro encontrado!");
		request.getRequestDispatcher("Carros.jsp").forward(request, response);
	}else{
		System.out.println("Não encontrado!");
		request.setAttribute("Carros", "Placa  Invalida");
		request.getRequestDispatcher("Busca.jsp").forward(request, response);

Meu formulário de busca:

<form class="form-horizontal" action="BuscarServlet">
<fieldset>
<div class="form-group">
	<label for="placa" class="col-lg-1 control-label">Placa</label>
	<div class="col-lg-3">
		<input type="text" class="form-control" id="placa" name="campoPlaca" placeholder="Placa do carro a ser buscado"/>
	</div>
</div>

 <div class="form-group">
  <div class="col-lg-10 col-lg-offset-2">
    <button type="submit" class="btn btn-primary">Buscar</button>
  </div>
</div>
</fieldset>

Minha DAO:

public static ArrayList<Carro> listaCarro = new ArrayList<Carro>();
public static void addCarro(Carro carro){
	listaCarro.add(carro);
	System.out.println("Registros: " + listaCarro.size());
}
public static ArrayList<Carro> retornarLista(){
	return listaCarro;
}
 public static boolean verificPlaca(Carro c){
		for(Carro carroCad: listaCarro){
			if(carroCad.getPlaca().equals(c.getPlaca())){
				return true; 
			}
		}
		return false;
	}	

Parte da listagem de todos os carros:

<h2 style="margin-left: 530px">Lista de Carros Cadastrados no Sistema</h2>
	<table class="table table-striped table-hover" style="width:60%; margin: 0 auto">
	<tr>
	<th>Modelo</th>
	<th>Cor</th>
	<th>Placa</th>
	<tr/>
	
<% for(int i = 0;i < ExeDAO.retornarLista().size(); i++){ %>
	<tr>
	<td><%= ExeDAO.retornarLista().get(i).getModelo() %></td>
	<td><%= ExeDAO.retornarLista().get(i).getCor() %></td>
	<td><%= ExeDAO.retornarLista().get(i).getPlaca() %></td>
	<tr/>
<%}%>
</table>

O que eu quero somente é que quando ele buscar a placa, encontre somente o carro da placa pesquisada.
Quem puder ajudar ai , vlw :smile:

Olá, este método não tem nenhum tipo de filtragem pelo que está procurando.
Assim como seu professor falaste, vc precisa buscar UM apenas, procurando pela placa.

Vc pode partir do método que verifica a placa, crie um novo a partir dele(copia e cola).
Mude o tipo de retorno para Carro. O nome do método pode ser buscaCarro. Por parametro vc pode receber um Carro com a placa ou somente a placa em String.
O conteúdo do método é praticamente o mesmo, porém lá onde tem return true, vc muda para retornar o Carro que corresponde com a placa: return carroCad;
Realmente é bem simples, só um pouco de lógica. Por isso, propositalmente não lhe passo o código pronto, para que possa aprender a fazer. :wink:

2 curtidas
public static Carro buscaPlaca(Carro c){ //tipo de retorno também alterado
	for(Carro carroCad: listaCarro){
		if(carroCad.getPlaca().equals(c.getPlaca())){
			return carroCad; //retorna um carro em vez de booleano
		}
	}
	return null; //Corrigido
}

Segundo o que nosso amigo disse acima você não passava nenhuma parâmetro para filtragem. Aqui copiei e colei seu método verificPlaca e apenas mudei o nome e o retorno do método.

1 curtida

Isso ai, mas precisa muda esse return false; para return null; e checar quando usar o método se não retornou null.

1 curtida

Obrigado amigos !!

Olá , eu fiz essa parte aqui :

public static ArrayList<Carro> listaCarro = new ArrayList<Carro>();
public static void addCarro(Carro carro){
	listaCarro.add(carro);
	System.out.println("Registros: " + listaCarro.size());
}
public static ArrayList<Carro> retornarLista(){
	return listaCarro;
}
 public static Carro buscaPlaca(Carro c){
		for(Carro carroCad: listaCarro){
			if(carroCad.getPlaca().equals(c.getPlaca())){
				return carroCad;
			}
		}
		return null;
	}

só que quando vai buscar a placa , ele ainda retorna todos os carros da lista

Servlet

Carro carro = new Carro();
	carro.setPlaca(request.getParameter("campoPlaca"));
	
	if(ExeDAO.buscaPlaca(carro) != null){
		System.out.println("Carro encontrado!");
		request.getRequestDispatcher("CarroEncontrado.jsp").forward(request, response);
	}else{
		System.out.println("Não encontrado!");
		request.setAttribute("Carros", "Placa  Invalida");
		request.getRequestDispatcher("Busca.jsp").forward(request, response);
	}

Tabela aonde era pra retornar somente o carro e retorna todos:

<% for(int j = 0;j < ExeDAO.retornarLista().size() ; j++){ %>
	<tr>
	<td><%= ExeDAO.retornarLista().get(j).getModelo()   %></td>
	<td><%= ExeDAO.retornarLista().get(j).getCor() %></td>
	<td><%= ExeDAO.retornarLista().get(j).getPlaca() %></td>
	<tr/>
<%}%>

Deve ser um erro bem ridiculo, igual vc disse Rodrigo, falta um pouco de lógica para eu entender, estou tentando fazer a manhã inteira, isso que ainda ta no começo do curso ;-;

Sim, realmente ridículo. rsrs
Vc precisa usar o método que “criou”. Vc continua chamando o outro método que retorna todos os registros.

Vc diz nessa tabela ? Eu ja tentei chamar o método que eu criei para retornar mas não estou conseguindo, na servlet eu ja mudei pra método que eu criei só para chamar somente um carro, ta complicado.

É que não será apenas substituir o método de busca da lista por esse que busca por placa.
Um retorna uma lista, outro um Carro. Precisa mudar várias coisas pra funcionar.
Exemplo: Vc está usando um FOR para percorrer a lista e criar a tabela. Esqueça esta abordagem, vc não tem lista para percorrer quando busca por placa, vc só terá um Carro, é só pegar os dados dele e jogar na tela.

Ou vc faz um método de busca de Carro por placa que também retorna uma lista, ai fica compatível do modo que vc popula a tabela, porém precisa um novo método de busca, sem contar que não faz sentido um método de busca q retorne uma lista e na lista nunca terá mais de um elemento.
Recomendo resolver a partir deste método de busca que já foi feito. Precisará de qualquer maneira entender como seu código está funcionando para desenvolver a lógica pra resolve-lo.

1 curtida

Consegui fazendo desse jeito aqui :

        <tr>
	<% Carro carro = new Carro(); %>
	<% carro.setPlaca(request.getParameter("campoPlaca")); %>
	<% ExeDAO.buscaPlaca(carro); %>
	<td><%= ExeDAO.buscaPlaca(carro).getModelo() %></td>
	<td><%= ExeDAO.buscaPlaca(carro).getCor() %>
	<td><%= ExeDAO.buscaPlaca(carro).getPlaca() %></td>
	<tr/>

Muito obrigado Rodrigo !!