Editar/Remover valores ArrayList [RESOLVIDO]

Galera sou novo nessa área e gostaria da ajuda de vocês para conseguir terminar esse exercício
eu ja tenho 2 métodos criados, um para cadastrar e outro para listar o que tem cadastrado no arraylist
preciso fazer mais dois métodos, um para alterar e outro para excluir mas não to conseguindo desenrolar isso
já li outros tópicos aqui no fórum e em outros lugares mas não consegui ainda como fazer esses métodos! :frowning:

[code]public class Main {

static ArrayList<Aluno> listaAlunos = new ArrayList<Aluno>();
//Cadastrando Alunos
//Não cadastrar matrícula repetida

public static void cadastrar(Aluno a) {
    if (a.nome.trim().equals("")) {
        JOptionPane.showMessageDialog(null, "Informar o nome do aluno");
    } else if (a.cpf.trim().equals("")) {
        JOptionPane.showMessageDialog(null, "Informar o CPF do aluno");
    } else {
        boolean achou = false;
        for (int i = 0; i < listaAlunos.size(); i++) {
            if (a.matricula == listaAlunos.get(i).matricula) {
                achou = true;
                break;
            }
        }
        if (achou == true) {
            JOptionPane.showMessageDialog(null, "A matrícula já se encontra cadastrada");
        } else {
            listaAlunos.add(a);
            JOptionPane.showMessageDialog(null, "Aluno cadastrado com sucesso");
        }
    }
}

public static void listar() {
    String saida = "";
    //Listar todos os Alunos Cadastrados
    for (int i = 0; i < listaAlunos.size(); i++) {
        saida = saida + "Nome: " + listaAlunos.get(i).nome + "\n" + "CPF: " + listaAlunos.get(i).cpf + "\n" + "Matrícula: " + listaAlunos.get(i).matricula;
    }
    JOptionPane.showMessageDialog(null, saida);
}[/code]

pense assim pra começar…

se você tiver um aluno que quer alterar, como vai saber qual aluno da lista você quer alterar? o que diferencia cada aluno?
é com esse atributo que você vai saber qual aluno alterar

quero apenas alterar o nome e excluir pelo nome, não precisa ser mais que isso
esqueci de falar que eu criei uma Classe Aluno
e nela é que tem os atributos nome, matricula e cpf!

Se quer alterar e excluir pelo nome é só iterar o array, buscando o nome desejado.

para remover:

remover(String nome) {
  for (int i = 0; i < listaAluno.size(); i++) {
    if (listaAluno.get(i).getNome().equals(nome)) {
      listaAluno.remove(i);
    }
  }
}

Pra alterar a mesma coisa, só adaptar. =)

[quote=felipeaps]Se quer alterar e excluir pelo nome é só iterar o array, buscando o nome desejado.

para remover:

remover(String nome) {
  for (int i = 0; i < listaAluno.size(); i++) {
    if (listaAluno.get(i).getNome().equals(nome)) {
      listaAluno.remove(i);
    }
  }
}

Pra alterar a mesma coisa, só adaptar. =)[/quote]

eu queria ajudar o cara a chegar na conclusão sozinho ehehhe… mas blz…

[quote=felipeaps]Se quer alterar e excluir pelo nome é só iterar o array, buscando o nome desejado.

para remover:

remover(String nome) {
  for (int i = 0; i < listaAluno.size(); i++) {
    if (listaAluno.get(i).getNome().equals(nome)) {
      listaAluno.remove(i);
    }
  }
}

Pra alterar a mesma coisa, só adaptar. =)[/quote]

Vai gerar ConcurrentModificationException :slight_smile:
Se quer remover um item da lista que está iterando, o correto (e talvez único modo), é via Iterator.

[quote=nel][quote=felipeaps]Se quer alterar e excluir pelo nome é só iterar o array, buscando o nome desejado.

para remover:

remover(String nome) {
  for (int i = 0; i < listaAluno.size(); i++) {
    if (listaAluno.get(i).getNome().equals(nome)) {
      listaAluno.remove(i);
    }
  }
}

Pra alterar a mesma coisa, só adaptar. =)[/quote]

Vai gerar ConcurrentModificationException :slight_smile:
Se quer remover um item da lista que está iterando, o correto (e talvez único modo), é via Iterator.[/quote]

É verdade hahaha
nem me atentei a isso.

mas ainda não conseguir chegar na conclusão! :confused:
onde que entro com a interação com o usuário para ele digitar o Nome para excluir?
esse método getNome() de onde vem? ele não existe aqui

Eu vi algo assim no seu código: a.nome

O que é isso? Cadê o get? Não esqueça do encapsular o seu pojo!
Sobre remover, é só varrer a lista até achar o aluno, remove da lista e dá um break !

Para editar, bastar dar um get e editar o objeto que por referência ele é alterado na sua lista.

[quote=nel]Eu vi algo assim no seu código: a.nome

O que é isso? Cadê o get? Não esqueça do encapsular o seu pojo!
Sobre remover, é só varrer a lista até achar o aluno, remove da lista e dá um break !

Para editar, bastar dar um get e editar o objeto que por referência ele é alterado na sua lista.[/quote]
a.nome se refere ao nome do aluno!
eu criei uma classe Aluno

public class Aluno { String nome; int matricula; String cpf; }

METODO REMOVER RESOLVIDO!

public static void remover() { String remover = JOptionPane.showInputDialog("Digite o Nome do Aluno para Excluir"); for (int i = 0; i < listaAlunos.size(); i++) { if (listaAlunos.get(i).nome.equals(remover)) { remover += listaAlunos.remove(i); } } }

RESOLVIDO TAMBÉM!

[code] public static void alterar() {

    String nome = JOptionPane.showInputDialog("Digite o Nome do Aluno que deseja Alterar");
    String novo = JOptionPane.showInputDialog("Digite o Novo Nome");
    for (int i = 0; i < listaAlunos.size(); i++) {
        if (listaAlunos.get(i).getNome().equals(nome)) {
            listaAlunos.get(i).setNome(novo);
           
        }
    }
}[/code]