Problemas em testar dados dentro de uma ArrayList

4 respostas
javaprogramação
L

Pessoal estou fazendo um programa de cadastro, estou utilizando ArrayList para armanezamento, acontece que um determinado momento quero que o sistema teste se o nome que está sendo cadastrado existe na Array se não existir cadastra se existir gera um Alert, eu tentei fazer de várias maneiras mas não estou conseguindo, dou mais detalhes no código abaixo:

principal.java

Dados dados= new Dados();

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {

String amigo = (String) jCamigo.getText();
    Emprestimo emprestimo = new Emprestimo(amigo);
    dados.cadastraEmprestimo(emprestimo); 
    System.out.println("Data do empréstimo.:" +dateFormat.format(emprestimo.getDataEmprestimo()) + " Data da Devolução.:  " + dateFormat.format(emprestimo.getDataDevolucao())+ " Nome do Amigo.: " + emprestimo.getNomeamigo()+ " Revista.: " + emprestimo.getRevista());

}

Dados.java // o problema é aqui: fiz este if mas ele simplesmente não funciona não testa, salva mesmo repedido

public void cadastraEmprestimo(Emprestimo emprestimo){

//Fiz e refiz este for para bloquear os amigos que ja tem emprestimos, para mim o algoritimo está certo   
     for(int i=0;i<emprestimoArray.size();i++){
       if(amigosArray.get(i).getNome().equals(emprestimo.getNomeamigo())) {
          JOptionPane.showMessageDialog(null, "Este Amigo já possui empréstimo", "alert", JOptionPane.ERROR_MESSAGE);
      }else{
            emprestimoArray.add(emprestimo);
       } 
     }
               
 }

Desculpe a confusão amigos, se precisarem eu posto mais detalhes do código…

4 Respostas

staroski

Você está percorrendo o emprestimoArray mas está verificando se o emprestimo está contido no amigosArray.

L

Tentei assim também, mas não funcionou…

Miguel_Avila

mano da System.out.print nessa parte “emprestimo.getNomeamigo()” e no “amigosArray.get(i)” e ve se ta saindo o esperado.

pmlm

Estás a percorrer um array mas se o if para o primeiro valor der false, estas imediatamente a adicionar o nome registo.
O que queres fazer é percorrer todo o array para verificar se existe algum repetido e só depois, se não existir, adicionar.

boolean exist = false;     // no inicio ainda nao encontramos nenhum repetido
for (<percorrerarray>) {   // percorremos o array
    if (<condicao>) {      // verificamos se é repetido
        exist = true;      // se for repetido, exist é verdadeiro
        break;             // paramos o ciclo, já encontrámos um
     }
 }
if (!exists) {      // fora do ciclo, se nao encontramos, adicionamos
    <adidiona>
}
Criado 17 de março de 2020
Ultima resposta 18 de mar. de 2020
Respostas 4
Participantes 4