Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Java] Problema con ArrayList

    Salve raga ho un problema con le ArrayList , vi spiego subito.

    1 Creo tre ArrayList specificando il tipo tramite classi che ho creato io.

    codice:
    ArrayList<Apo> listaold=null;
    ArrayList<Apo> listanew=null;
    ArrayList<ApoSpeMod> listamod=new ArrayList<ApoSpeMod>();
    la Classe Apo è questa:

    codice:
    public class Apo {
    	   public String Specifica;
    	   public String Descrizione;
    	   public String Data_sped;
    	   public String Gtec;
    	   public String Quantita;
    	   public String Ordine;
    	   public String Item;
    	   public String Plant;
    	   public String Data;
    }
    la Classe ApoSpeMod è questa:

    codice:
    class ApoSpeMod {
    	public String Specifica;
    	public String Ordine;
    	public String Item;
    	public String Data_new;
    	public String Data_old;
    	public String Quantita_new;
    	public String Quantita_old;
    	public String Nota;
    	public String Nota2;
    	public String Plant;
    }
    Dopo inizializzo listaold e listanew con un metodo che preleva i dati da un file excel.
    Faccio dei confronti tra i due, e le righe risultanti devono essere copiate in listamod.

    codice:
    for(int i=0;i<listanew.size();i++){
    				for(int y=0;y<listaold.size();y++){
    					if(listanew.get(i).Specifica.equals(listaold.get(y).Specifica)&&listanew.get(i).Ordine.equals(listaold.get(y).Ordine)&&listanew.get(i).Item.equals(listaold.get(y).Item)){
    						if(!listanew.get(i).Data_sped.equals(listaold.get(y).Data_sped)||!listanew.get(i).Quantita.equals(listaold.get(y).Quantita)){
    							ApoSpeMod ogg = new ApoSpeMod();
    							ogg.Specifica=listanew.get(i).Specifica;
    							ogg.Ordine=listanew.get(i).Ordine;
    							ogg.Item=listanew.get(i).Item;
    							ogg.Data_old=listaold.get(y).Data_sped;
    							ogg.Data_new=listanew.get(i).Data_sped;
    							ogg.Quantita_old=listaold.get(y).Quantita;
    							ogg.Quantita_new=listanew.get(i).Quantita;
    							ogg.Nota=listanew.get(i).Descrizione;
    							ogg.Nota2=listanew.get(i).Gtec;
    							ogg.Plant=listanew.get(i).Plant;
    							listamod.add(ogg);
    						}
    						
    						listanew.remove(i);
    					
    					}
    				}
    			}
    Ora il problema è che se i valori relativi all'ultimo indice di listanew sono uguali a quelli di listaold , mi va in errore sul primo if , altrimenti se sono diversi mi funziona perfettamente.
    Aggiungo che i controlli per tutti gli indici delle arraylist funzionano , mi va in errore solo con l'ultimo, perchè ?

    qualcuno sa aiutarmi !!!!

    ciao grazie

  2. #2

    Re: [Java] Problema con ArrayList

    Originariamente inviato da fcorsa
    Faccio dei confronti tra i due, e le righe risultanti devono essere copiate in listamod.
    Cosa intendi per "righe risultanti"? Le righe in comune?... Qulle presenti nella old ma non nella new? ... Quelle presenti nella new ma non nella old?

    Spiegati meglio, perchè si può risolvere il tutto semplicemente andando a ridefinire il metodo equals della classe Apo, e sfruttando il metodo contains dell'interfaccia Collection
    Al mio segnale... scatenate l'inferno!

  3. #3
    ciao
    scusa io vedo l'ArrayList come una tabbella di dati. cmq per righe intendo l'oggetto Apo i-esimo nell' ArreyList.

    Spero che in tutto sono riuscito a spiegarmi bene e che hai capito il problema.

    ciao grazie

  4. #4
    Si questo l'avevo capito, anche se dire che ArrayList è visto come una tabella non è il massimo... al massimo lo puoi definire come un insieme

    Cmq volevo capire cosa ti aspetti dal confronto dei due ArrayList.
    Al mio segnale... scatenate l'inferno!

  5. #5
    scusa per il ritardo della risposta ma ho avuto preblemi di rete.

    Volevo confrontare i valori degli oggetti Apo nelle due liste tramite specifica, ordine e item.
    se ci sono oggetti Apo uguali allora controllo se il valore della data e quello della quantità sono diversi, se si copio i valori dei due apo in un nuovo ArrayList (ecco perche un ApoSpeMod) altrimenti non faccio altro che rimuovere l'apo dalla listanew (che poi utilizzo per altri scopi).

    Spero di essere stato chiaro. il tutto mi serve per confrontare delle righe di due file excel.

    ciao grazie

  6. #6

  7. #7
    codice:
    for(int i=0;i<listanew.size();i++){
    				for(int y=0;y<listaold.size();y++){
    					if(listanew.get(i).Specifica.equals(listaold.get(y).Specifica)&&listanew.get(i).Ordine.equals(listaold.get(y).Ordine)&&listanew.get(i).Item.equals(listaold.get(y).Item)){
    						if(!listanew.get(i).Data_sped.equals(listaold.get(y).Data_sped)||!listanew.get(i).Quantita.equals(listaold.get(y).Quantita)){
    							ApoSpeMod ogg = new ApoSpeMod();
    							ogg.Specifica=listanew.get(i).Specifica;
    							ogg.Ordine=listanew.get(i).Ordine;
    							ogg.Item=listanew.get(i).Item;
    							ogg.Data_old=listaold.get(y).Data_sped;
    							ogg.Data_new=listanew.get(i).Data_sped;
    							ogg.Quantita_old=listaold.get(y).Quantita;
    							ogg.Quantita_new=listanew.get(i).Quantita;
    							ogg.Nota=listanew.get(i).Descrizione;
    							ogg.Nota2=listanew.get(i).Gtec;
    							ogg.Plant=listanew.get(i).Plant;
    							listamod.add(ogg);
    						}
    						
    						listanew.remove(i);
    					
    					}
    				}
    			}
    Secondo me l'errore è nella rimozione dalla lista. Non puoi rimuovere oggetti dalla lista mentre la cicli, il istanew.size() cambia in continuazione e si incasina.
    Se usavi i generics ti dava immediatamente errore.
    Prova a creare una lista di appoggio dove ci metti gli oggetti da rimuovere e poi dopo che hai fatto le operazioni.
    Cicli la lista da rimuovere e togli l'oggetto dalla listanew, il riferimento all'oggetto è lo stesso quindi puoi usare direttamente .remove(oggetto).

  8. #8
    Non ci avevo pensato,provo la tua ipotesi è vedo se va. ti ringrazio ti faccio sapere.

  9. #9
    Ho provato ad aggiungere un ArrayList temporanero modificando il codice in questo modo

    codice:
    ArrayList<Apo> tempnew=listanew;
    			
    			for(int i=0;i<listanew.size();i++){
    				for(int y=0;y<listaold.size();y++){
    					if(listanew.get(i).Specifica.equals(listaold.get(y).Specifica)&&listanew.get(i).Ordine.equals(listaold.get(y).Ordine)&&listanew.get(i).Item.equals(listaold.get(y).Item)){
    						if(!listanew.get(i).Data_sped.equals(listaold.get(y).Data_sped)||!listanew.get(i).Quantita.equals(listaold.get(y).Quantita)){
    							ApoSpeMod ogg = new ApoSpeMod();
    							ogg.Specifica=listanew.get(i).Specifica;
    							ogg.Ordine=listanew.get(i).Ordine;
    							ogg.Item=listanew.get(i).Item;
    							ogg.Data_old=listaold.get(y).Data_sped;
    							ogg.Data_new=listanew.get(i).Data_sped;
    							ogg.Quantita_old=listaold.get(y).Quantita;
    							ogg.Quantita_new=listanew.get(i).Quantita;
    							ogg.Nota=listanew.get(i).Descrizione;
    							ogg.Nota2=listanew.get(i).Gtec;
    							ogg.Plant=listanew.get(i).Plant;
    							listamod.add(ogg);
    						}
    					tempnew.remove(i);
    					
    					}
    				}
    			}
    			
    			genera(tempnew,listamod,desfile);
    ma mi da sempre lo stesso errore ! quindi il problema non e il listanew.size incasinato dal .remove(i) .

    Uffaaaaaaaa

    cmq grazie del suggerimento

  10. #10
    cmq il problema è proprio il remove. perchè tornando al codice originario se elimino listanew.remove(i); funziona perfettamente , se lo metto da errore al primo if ma solo nel confronto del indice i-esimo e j-esimo.

    come faccio

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.