Carríssimos,
aqui estou eu outra vez a pedir a ajuda de vcs.
Como alguns já sabem estou fazendo um trabalho final de semestre na faculdade e tem algumas partes
que como meu professor não ensinou tenho que me virar. Portanto, aqui está minha dúvida.
Criei uma array list Cliente, e agora preciso receber um nome de entrada e excluir o cliente com o respectivo
nome. então criei esse método, porém não está dando certo, não aparece nenhum erro, mas ele não acha, olhem:
public void excluirCliente(String nome){
for(int i = 0; i < cliente.size(); i++){
if(cliente.get(i).getNome().equalsIgnoreCase(nome))
cliente.remove(nome);
}
}
Eu mando o nome, através da minha classe principal chamando esse método assim:
[code]
if(action.getSource() == cons){
String nome;
nome = JOptionPane.showInputDialog("Digite um Nome: " );
System.out.println(loja.cliente.size());
loja.excluirCliente(nome);
System.out.println(loja.cliente.size());
}[/code]
Por mim está certo, porém, não exclui de maneira alguma.
O
[code]System.out.println(loja.cliente.size());[\code]
é só pra verificar se excluiu.
Se puderem ajudar… Fico muito Grato.
Abraços.!
O método “remove” da interface java.util.List (que é o que você está usando) pede um objeto, não um campo de um objeto. Quando você passou só o nome, 'remove" não consegue remover o elemento do ArrayList.
Outra coisinha. Quando você anda sobre uma lista com for e usando índices, se você remover um elemento dessa lista enquanto a está percorrendo, vai tomar uma exceção “ConcurrentModificationException”. No seu caso, o correto é usar um Iterator, e remover o elemento usando o método “remove” do Iterator.
É mais simples mostrar que explicar. Vou tentar corrigir seu código. Estou supondo que você declarou a variável “cliente” (seria melhor usar um nome como “clientes” (plural, indicando que contém vários clientes) ou “listaClientes”, para evitar confusão) dessa maneira:
List<Cliente> clientes = new ArrayList<Cliente>();
Se você declarou assim, então você deveria fazer algo como:
public void excluirClientePorNome (String nome) {
for (Iterator<Cliente> itCliente = clientes.iterator(); itCliente.hasNext(); ) {
Cliente esteCliente = itCliente.next();
if (esteCliente.getNome().equalsIgnoreCase (nome)) {
itCliente.remove(); // remove esteCliente
}
}
}
Mais uma coisinha. Talvez você queira saber quantos clientes foram excluídos por excluirClientePorNome(). Você poderia, nesse caso, retornar o número de clientes excluídos:
public int excluirClientePorNome (String nome) {
int nClientesExcluidos = 0;
for (Iterator<Cliente> itCliente = clientes.iterator(); itCliente.hasNext(); ) {
Cliente esteCliente = itCliente.next();
if (esteCliente.getNome().equalsIgnoreCase (nome)) {
itCliente.remove(); // remove esteCliente
nClientesExcluidos++;
}
}
return nClientesExcluidos;
}