Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema con eccezione

  1. #1

    Problema con eccezione

    Buonasera, ho un problema con un programma relativo ai collection framework in cui devo fondere due liste (ho due liste, con queste devo creare una collezione che ha come elementi il primo della lista1 e subito dopo l'ultimo della lista2,il secondo della lista1 e il penultimo della lista2 e cosi via..,);
    netbeans mi segnala un'eccezione del tipo "no such element exception" all'istruzione list.add(L1.previous()) non riesco a capire il perche viene lanciata, avete qualche idea???

    codice:
    import java.util.List ;
    import java.util.Collection ;
    import java.util.LinkedList ;
    import java.util.ListIterator ;
    
    public class NewClass1 {
    
    	static Collection fondi(List l1,List l2) {
    
    		Collection C;
    	
    		List list = new LinkedList();
    
    		ListIterator L = l1.listIterator();
    		ListIterator L1 = l2.listIterator(l2.size()-1);
    
    		for(int i = 0; i < (l1.size())*2 ; i++) {
    			
    			if(i % 2 == 0) {
    
      				list.add(L.next());
    			} else {
    			
    				list.add(L1.previous());
    			}
    		}
    		
    		
    
    		C = list ;
    
    		return C ;
    	}
            
            public static void main(String args[]) {
                
                LinkedList l = new LinkedList() ;
                l.add(1);
                l.add(2);
                l.add(3);
                List L = l ;
                
                LinkedList l1 = new LinkedList();
                l1.add(4) ;
                l1.add(5) ;
                l1.add(6) ;
                
                List L1 = l1 ;
                
                System.out.print(fondi(L,L1)) ;
                
                
            }
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quell'eccezione significa che non hai un elemento precedente...

    Dovresti fare una cosa del tipo:

    codice:
    if (iteratore.hasPrevious()) {
       iteratore.previuos();
    }
    Ad ogni modo rivedrei quell'algoritmo, non sono sicuro che faccia esattamente quello che credi

    edit: mancano tutti i tipi generici

    ps: il codice va messo col tag CODE

    edit: perché fai quelle assegnazioni inutili?

    List L = l;
    List L1 = l1;

    A cosa servono? A nulla...

    Inoltre:

    ListIterator L = l1.listIterator();
    ListIterator L1 = l2.listIterator(l2.size()-1);

    L punta a l1
    L1 punta a l2

    chiaro, no?

    Il -1 sul list iterator è sbagliato: il cursore è posto prima (o dopo) di un elemento, non sull'elemento
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Avevo 5 minuti e mi è venuta voglia di scrivere un po' di codice

    Io lo farei così:

    codice:
    import java.util.Collection;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.ListIterator;
    
    public class Main
    {
        private static <T> Collection<T> mergeCollection(List<T> list1, List<T> list2)
        {
    	Collection<T> mergedCollection = new LinkedList<T>();
    
    	ListIterator<T> iterator1 = list1.listIterator();
    	ListIterator<T> iterator2 = list2.listIterator(list2.size());
    
    	int maxSize = Math.max(list1.size(), list2.size());
    
    	for (int i = 0; i < maxSize; i++)
    	{
    	    if (iterator1.hasNext())
    	    {
    		mergedCollection.add(iterator1.next());
    	    }
    
    	    if (iterator2.hasPrevious())
    	    {
    		mergedCollection.add(iterator2.previous());
    	    }
    	}
    
    	return mergedCollection;
        }
    
        public static void main(String args[])
        { 
    	LinkedList<Integer> list1 = new LinkedList<Integer>();
    	list1.add(1);
    	list1.add(2);
    	list1.add(3);
    	list1.add(10); 
    	list1.add(11);
    	list1.add(12);
    
    	LinkedList<Integer> list2 = new LinkedList<Integer>();
    	list2.add(4);
    	list2.add(5);
    	list2.add(6);
    
    	System.out.println(Main.<Integer> mergeCollection(list1, list2));
        }
    }
    Itero sulla lunghezza della lista più lunga e ad ogni iterazione aggiungo un elemento dalla prima lista e un elemento dalla seconda lista. Usando hasNext e hasPrevious gestisco in automatico il caso in cui una delle due liste è più lunga: in quel caso aggiungo in coda gli elementi della lista più lunga.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    mille grazie...non avevo pensato a realizzarlo in questo modo

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Di nulla, non avevo niente da fare
    Spero che il codice sia chiaro e che ti possa essere utile
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.