pessoal tenho este codigo ele funciona porem quando quero apagar algo que não se encontra no vector ele não retorna a informação que devia por favor dem uma luz.
public void apagarProduto(String nome)
{
Produto p;
if(nome.equals(""))
JOptionPane.showMessageDialog(null, "Por favor digite o nome do producto no campo nome");
else
{
if(!nome.equals("")){
for(int i = 0; i < produto.size(); i++)
{
p = produto.get(i);
if(p.nome.equals(nome))
{
produto.removeElementAt(i);
area.append("\nApagou da lista o produto " + nome);
i = produto.size();
}
}
}
else
{
JOptionPane.showMessageDialog(null, "\nO produto " + nome + " não consta na lista\n" );
}
}
}
Seu código está totalmente errado.
Primeiramente, você não pode mexer na lista enquanto itera sobre ela, a menos que esteja usando um iterator. Depois, você não pode simplesmente achar que um produto não foi encontrado, só porque o if falhou na primeira vez. Seria necessário testar se o código entrou naquele if alguma vez.
Finalmente, o código está tem algumas redundâncias. Por exemplo, você já testa se o nome.equals(""), portanto, não precisa testar novamente a condição inversa no else.
O correto seria algo assim:
[code]public Produto apagarProduto(String nome) {
//Deixe a interface gráfica capturar a exceção e exibir a mensagem
if(nome == null || nome.isEmpty())
throw new IllegalArgumentException(“Por favor, digite o nome do producto no campo nome!”);
Iterator<Produto> it = produto.iterator();
while (it.hasNext()) {
Produto p = it.next();
if (nome.equals(p.nome)) {
it.remove(); //Maneira certa de remover enquanto percorre
return p; //Retorna o produto removido
}
}
return null; //Produto não removido
}[/code]
Note que esse método retorna o produto removido, ou nulo, caso nenhum produto tenha sido removido. Portanto, fica a cargo da sua interface gráfica adicionar o resultado ao JTextArea, ou dar uma mensagem de que nenhum produto foi removido.
Para que seu código não fique confuso é importante não misturar código de interface gráfica com código da lógica do seu sistema. Além disso, procure usar corretamente o JOptionPane. O primeiro parâmetro dele exige a janela que está abrindo o JOptionPane e não null, como vc está passando.
Desde que a lista seja um ArrayList ou um Vector.
Caso contrário, os códigos usando get() terão uma performance deplorável (seja com iteração reversa ou não).
[quote=ViniGodoy]Seu código está totalmente errado.
Primeiramente, você não pode mexer na lista enquanto itera sobre ela, a menos que esteja usando um iterator. Depois, você não pode simplesmente achar que um produto não foi encontrado, só porque o if falhou na primeira vez. Seria necessário testar se o código entrou naquele if alguma vez.
Finalmente, o código está tem algumas redundâncias. Por exemplo, você já testa se o nome.equals(""), portanto, não precisa testar novamente a condição inversa no else.
O correto seria algo assim:
[code]public Produto apagarProduto(String nome) {
//Deixe a interface gráfica capturar a exceção e exibir a mensagem
if(nome == null || nome.isEmpty())
throw new IllegalArgumentException(“Por favor, digite o nome do producto no campo nome!”);
Iterator<Produto> it = produto.iterator();
while (it.hasNext()) {
Produto p = it.next();
if (nome.equals(p.nome)) {
it.remove(); //Maneira certa de remover enquanto percorre
return p; //Retorna o produto removido
}
}
return null; //Produto não removido
}[/code]
Note que esse método retorna o produto removido, ou nulo, caso nenhum produto tenha sido removido. Portanto, fica a cargo da sua interface gráfica adicionar o resultado ao JTextArea, ou dar uma mensagem de que nenhum produto foi removido.
Para que seu código não fique confuso é importante não misturar código de interface gráfica com código da lógica do seu sistema. Além disso, procure usar corretamente o JOptionPane. O primeiro parâmetro dele exige a janela que está abrindo o JOptionPane e não null, como vc está passando.[/quote]
“Não misturar codigo de GUI e logica” poderia dar uma dica ?
Muito grato pelas correções e dicas acima de tudo a sinceridade, vejo que tenho muito por estudar pois sou novo no mundo java e grato pela atenção e prontidão.
[quote=lalau]“Não misturar codigo de GUI e logica” poderia dar uma dica ?
Muito grato pelas correções e dicas acima de tudo a sinceridade, vejo que tenho muito por estudar pois sou novo no mundo java e grato pela atenção e prontidão.
[/quote]
Note que o código que postei não está preocupado em exibir mensagens para o usuário.
Ele apenas faz a exclusão e retorna informação suficiente para que uma interface gráfica dê essas mensagens.
Foi isso que eu quis dizer:
Separe seu código em partes lógicas: Algumas trabalham com dados, outras gravam dados no disco, outras exibem coisas para o usuário;
Procure aprender sobre os conceitos de encapsulamento e divisão de camadas;