Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA]ArrayList ERRORE

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37

    [JAVA]ArrayList ERRORE

    Ciao ragazzi, nel mio codice ho notato che ArrayList non scorre tutti gli elementi.

    vi riporto il codice dove è segnalato l'errore

    codice:
    public ArrayList<rispLista> vediMessaggi(Utente idU) {        
            System.out
                    .println("--------INIZIA CLASSE INVIA MESSAGGI METODO VEDI MESSAGGIO ");
            Messaggio m=new Messaggio();
            Messaggio m1=new Messaggio();
            m=listaMessaggi.get(0);
            m1=listaMessaggi.get(1);
    
        System.out.println("m " + m.getTesto() + " m1 " + m1.getTesto());
            ArrayList<rispLista> vediMex=new ArrayList<rispLista>();
            int secondi=0;
            String orarioSistema,orarioScadenzaMessaggio;
            
            for (int i = 0; i <listaMessaggi.size()&&!listaMessaggi.isEmpty(); i++) {
                System.out.println("for con i= " + i+ " g "+g);
                m=null;
                m=listaMessaggi.get(i);
    
                System.out.println("idUtente del mex " + m.getIdMes()
                        + " id utente " + idU.getidUtente()+" utente messaggio "+m.getIdUtente());
                if(m.getIdUtente().equals(idU.getidUtente())){
                    orarioSistema=getDataOdierna()+" "+getOraAttuale();
                    orarioScadenzaMessaggio=m.getData()+" "+m.getOrario();
                    System.out.println("Orario Sistem " + orarioSistema
                            + " orario Scadenza Messaggio "
                            + orarioScadenzaMessaggio);
                    secondi=diffDataOrario(orarioScadenzaMessaggio, orarioSistema, m.getDurata());
                    System.out.println("i secondi sono " + secondi);
                    if(secondi>=0){
                        
                            listaMessaggi.remove(m);
                            System.out.println("messaggio rimosso");
                            
                        
                    }else{
                        rispLista rL=new rispLista(m.getIdMes(), m.getIdAmico(), m.getTesto(), (-1)*secondi);
                        vediMex.add(rL);
                    }
                    
                }
                
                
            }
            
            
            return vediMex;
            
        }
    ho inserito delle println per capire come mai, ma non ci sono riuscito. L'unica cosa che ho notato è che la i del for si ferma a 0 nonostante la dimensione dell'ArrayList è uguale a 2.

    nelle prime righe dove ho scritto

    codice:
    m=listaMessaggi.get(0);        m1=listaMessaggi.get(1);
        
        System.out.println("m " + m.getTesto() + " m1 " + m1.getTesto());
    non rilevo nessu errore e i campi restituiti sono corretti.

    potete aiutarmi?

    grazie

  2. #2
    Non ho letto tutto il codice ma se nel for fai un listaMessaggi.remove(m); e ovvio che poi la dimensione cambia....

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Non ho letto tutto il codice ma se nel for fai un listaMessaggi.remove(m); e ovvio che poi la dimensione cambia....
    Grazie, non ci stavo proprio pensando
    grazie ^_^

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    come posso far ad eliminare quei elementi nella listaMessaggi?
    anche se salvo gli indici in una stringa e dopo li converto in numeri interi ed elimino ogni elemento della lista uno ad uno, la dimensione cambierebbe e gli indici non sarebbero più veritieri...
    Ultima modifica di iTuring; 29-01-2015 a 19:34

  5. #5
    Scorri la lista tramite un java.util.Iterator e su questo ultimo chiame il remove appena si verifica la condizione che ti interessa

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Scorri la lista tramite un java.util.Iterator e su questo ultimo chiame il remove appena si verifica la condizione che ti interessa
    si grazie del consiglio, ci sono riuscito. ^_^

    ho un altro problema...non capisco perchè il metodo isEmpty() mi segnala errore. Ti scrivo il codice.

    Questo è un metodo di una classe:

    codice:
    private ArrayList<rispLista> cercaMessaggio(String id, Utente u) {        System.out.println("--------cerca messaggio--------");
            ArrayList<rispLista> nM=new ArrayList<rispLista>();
            ArrayList<rispLista> nM2=new ArrayList<rispLista>();
            invioMessaggio iM = new invioMessaggio(u.getidUtente(), listaM);
    
    
                    nM=iM.vediMessaggi(u);
                    
                    System.out.println("----vedi M-------");
                    
                    if(!nM.isEmpty()){
                        System.out.println("entra");
                    Iterator<rispLista> itM1=nM.iterator();
                    while(itM1.hasNext()){
                        rispLista rp=itM1.next();
                        if(rp.getId_mes().equals(id)){
                            nM2.add(rp);
                        }
                    }
                    
                    System.out.println("------fine M-----");
                    
                    
                    
                    }else nM2=null;
                    System.out.println("---------fine mex--------");
                    return nM2;
                }

    Mentre nel main faccio dei controlli...

    codice:
    idU = cercaUtente(richiesta.getIdUtente());                    if(idU!=null){
                        nM=cercaMessaggio(richiesta.getIdMessaggio(),idU);
                        System.out.println("prova isEMPITY nM"+!nM.isEmpty());
                        if(!nM.isEmpty()){System.out
                                .println("-------Visualizza lista nM----------");
                        Iterator<rispLista> itR=nM.iterator();
                        while(itR.hasNext()){
                            rispLista rrr=itR.next();
                            }
                        System.out.println("-----fine lista nM-------");
       }else{
                            risposta = new Risposta("HTTP/1.0", "400", "ERROR",
                                        "Messaggio " + richiesta.getIdMessaggio()
                                                + " non esiste");
                        }
    }
    Quando l'array nM è null mi segnala un errore all'istruzione if(!nM.isEmpty()), mentre dovrebbe entrare nell'else

    "Exception in thread "pool-1-thread-2" java.lang.NullPointerException"<----ERRORE

  7. #7
    Null != Empty.....
    cioè un riferimento "null" non è proprio nulla e quindi non puoi invocare nulla su questo riferimento sia esso una lista o qualsivoglia tipo.
    Quindi l'unica cosa che puoi testare è che il riferimento non sia nullo, if nM != null, consiglio una ripassatina alla teoria questa è una nozione base della programmazione ad oggetti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.