Visualizzazione dei risultati da 1 a 8 su 8

Discussione: esercizio liste java

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    9

    esercizio liste java

    buonasera ho il seguente esercizio sulle liste in java che dice :
    "dato un valore come parametro devo estrarre(eliminare)dalla lista l'elemento che precede il parametro dato, se esiste all interno della lista, e restituirlo altrimenti restituire zero."
    es.
    avendo la lista[2,4,9,10] e dato il prametro 9 la lista deve poi risultare [2,9,10] e restituire 9.

    io ho provato a farlo in questo modo:
    codice:
    public int estrai(int val){
    
    		int estratto = 0 ;
    
    		if(first == null)
    		{
    			return 0 ;
    		}
    		else
    		{
    			ListElem iterator = first ;
    			while(iterator.next != null)
    			{
    				if(iterator.next.dato == val)
    				{
    					estratto = iterator.dato ;
    					iterator = null ;
    				}
    
    				iterator = iterator.next ;
    
    			}
    		}
    
    		return estratto ;
    	}
    solo che quando lo lancio nel main mi da un errore di tipo NullPointerException ..mi sapete aiutare ?? grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: esercizio liste java

    Originariamente inviato da ste9213
    solo che quando lo lancio nel main mi da un errore di tipo NullPointerException ..mi sapete aiutare ?? grazie in anticipo
    La jvm ti dice chiaramente dove si verifica la NullPoiterException... Puoi riportate il codice in questione, compreso lo stack trace dell'eccezione?

    edit

    codice:
    if(iterator.next.dato == val)
    {
        estratto = iterator.dato ;
        iterator = null ;
     }
    
    iterator = iterator.next ;
    ecco l'errore: quando trovi quello che cerchi metti a null iterator... e su di esso chiami next!
    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
    Registrato dal
    Aug 2013
    Messaggi
    9
    qui c'è tutto il codice dove ho scritto il metodo:
    codice:
    
    
    codice:
     public class MiaLista {
    
        private class ListElem {
    
            private int dato;
            private ListElem next = null;
    
            public int getDato() {
                return dato;
            }
    
            public void setDato(int dato) {
                this.dato = dato;
            }
    
            public ListElem getNext() {
                return next;
            }
    
            public void setNext(ListElem next) {
                this.next = next;
            }
    
            public boolean equals(int val) {
                return dato == val;
            }
    
        }
    
        private ListElem first;
    
        public MiaLista() {
            first = null;
        }
    
        public void insert(int val) {
    
            ListElem elem = new ListElem();
            elem.setDato(val);
            elem.setNext(first);
            first = elem;
    
        }
    
        public boolean isEmpty() {
            return first == null;
        }
    
        public void printList() {
            ListElem iterator = first;
            System.out.print("Elementi: ");
            while (iterator != null) {
                System.out.print(iterator.getDato() + ",");
                iterator = iterator.getNext();
            }
            System.out.println("");
        }
    
        public int estrai(int val){
    
    		int estratto = 0 ;
    
    		if(first == null)
    		{
    			return 0 ;
    		}
    		else
    		{
    			ListElem iterator = first ;
    			while(iterator.next != null)
    			{
    				if(iterator.next.dato == val)
    				{
    					estratto = iterator.dato ;
    					iterator = null ;
    				}
    
    				iterator = iterator.next ;
    
    			}
    		}
    
    		return estratto ;
    	}
    qui c'è il main:
    codice:
    
    
    codice:
    public class UsaMiaLista {
    
        public static void main(String[] args) {
    
            MiaLista lista = new MiaLista();
    
            lista.insert(9);
    	lista.insert(30);
    	lista.insert(13);
    	lista.insert(1);
    	lista.insert(3);
    	lista.insert(4);
    	lista.insert(1);
    	lista.insert(1);
    
    	System.out.println("La lista contiene:");
    	lista.printList();
    
    	int a = lista.estrai(3) ;
    	System.out.println(a) ;
    
    	lista.printList();
    
        }
    
    }
    e qui ti scrivo quello che mi dice la jvm:
    La lista contiene:
    Elementi: 1,1,4,3,1,13,30,9,
    Exception in thread "main" java.lang.NullPointerException
    at MiaLista$ListElem.access$100(MiaLista.java:3)
    at MiaLista.estrai(MiaLista.java:78)
    at UsaMiaLista.main(UsaMiaLista.java:19)
    Premere un tasto per continuare . . .


    spero di aver capito bene ciò che mi hai chiesto.grazie

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai letto il mio edit?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    9
    Si scusa se rispondo ora ma ero a lavoro ... grazie per l'aiuto ! Io pensavo di dover mettere a null pr eliminare l elemento dalla lista ma evidentemente devo " giocare " sui next non ho ancora ben capito come eliminare l'elemento per adesso ! grazie ancora per la disponibilità

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ste9213
    evidentemente devo " giocare " sui next
    Esatto!

    Originariamente inviato da ste9213
    non ho ancora ben capito come eliminare l'elemento per adesso
    Spero il disegnino ti aiuti.

    codice:
             Nel while        Questo è
              sei qui       l'elemento da
             (corrente)       scartare
    
    ... --->[dato, next]--->[dato, next]--->[dato, next]---> ...
                       |                    ^
                       |                    |
                       + - - - - - - - - - -+
                    Questo è quello che devi fare
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    9
    Si grazie mi è utile ... solo che sto provando a farlo da un po' e non mi viene ! Ora non riesco a collegarmi dal pc ma ho ancora un piccolo problema spero di farmi capire !
    nel ciclo while all interno della if al posto di mettere "iterator = null " ho messo " iterator = iterator.next.next " e fuori dalla if ho lasciato il " iterator = iterator.next " ,che non dovrebbe essere quello che mi permette di scorrere la lista ?.ma facendo così mi restituisce la lista uguale a prima . È se metto " iterator.next = iterator.next.next mi cancella l'elemento dove sono giustamente !

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ste9213
    Si grazie mi è utile ... solo che sto provando a farlo da un po' e non mi viene !
    Ok, cerco di spiegartelo facendoti "ragionare":

    Quando entri nel corpo del while
    codice:
    while(iterator.next != null)
    {
    Qui il 'iterator' fa riferimento all'elemento che nel mio disegnino è il primo indicato, quello che è precedente l'elemento da controllare

    Giustamente vai a controllare iterator.next.dato per vedere se il dato è quello che stai cercando.

    Se è quello, allora devi andare a cambiare iterator.next e a questo next devi assegnare ..... pensaci tu.


    P.S. Però ragiona anche su un'altra cosa: il tuo codice funzionerebbe se l'elemento da eliminare fosse il primo?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.