Visualizzazione dei risultati da 1 a 10 su 38

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Puoi spiegarti meglio?
    Mettiamola così: come hai fatto prima, ha senso dover fare socialY.stampaUtenti(socialX) o anche solo socialX.stampaUtenti(socialX) ?
    Direi di no ...

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ma ovviamente riesco a stampare solo l'ultimo utente inserito...
    Inoltre mi sono accorta di aver sbagliato la stesura della classe: così come è fatta è una pila e la pila si può stampare solo svuotandola (infatti era così che ero riuscita a fare la stampa!).
    Se inserisci 2 utenti in sequenza Utente1 poi Utente2, la struttura che ottieni è:

    codice:
           +---------------------------------+    +-----------------------------------+
    top -->|user=Utente2  utentePresentato=--|--->|user=Utente1  utentePresentato=null|
           +---------------------------------+    +-----------------------------------+
    Che è una lista linkata (tecnicamente scorribile senza alcun "svuotamento", qualunque cosa intendessi per "svuotandola") è che praticamente, descrive questo: "Utente2 è stato presentato da Utente1 il quale non è stato presentato da nessuno".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Mettiamola così: come hai fatto prima, ha senso dover fare socialY.stampaUtenti(socialX) o anche solo socialX.stampaUtenti(socialX) ?
    Direi di no ...

    Se inserisci 2 utenti in sequenza Utente1 poi Utente2, la struttura che ottieni è:

    codice:
           +---------------------------------+    +-----------------------------------+
    top -->|user=Utente2  utentePresentato=--|--->|user=Utente1  utentePresentato=null|
           +---------------------------------+    +-----------------------------------+
    Che è una lista linkata (tecnicamente scorribile senza alcun "svuotamento", qualunque cosa intendessi per "svuotandola") è che praticamente, descrive questo: "Utente2 è stato presentato da Utente1 il quale non è stato presentato da nessuno".
    Ma diciamo che a livello concettuale l'ho capito, solo che non sono capace di tradurlo in codice
    (per svuotandola intedevo che si eliminano tutti gli elementi tramite un metodo pop() che però mi consentiva di stampare correttamente...solo che poi la lista alla fine era vuota...una cosa così:

    codice:
    public Object estrai() {
            if (isEmpty()) {
                return null;
            }
            Object result=top.oggetto;
            top=top.prossimo;
            return result;
        }

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    codice:
    public Object estrai() {
            if (isEmpty()) {
                return null;
            }
            Object result=top.oggetto;
            top=top.prossimo;
            return result;
        }
    Ma non devi "toccare" top! Altrimenti è ovvio che alteri la lista!

    codice:
    Nodo nodoCorrente = top;
    
    while (nodoCorrente != null) {
        // usa 'user' di nodoCorrente
        nodoCorrente = nodoCorrente.utentePresentato;
    }
    Il while che ho scritto, scorre tutta la lista, senza alterarla. E qualunque cosa vuoi fare con 'user' la devi fare dentro il while.
    Se vuoi invece fare un metodo che estrae il "prossimo" elemento, devi mantenere lo "stato" del nodo corrente da qualche parte. Preferibilmente non in SocialPlatform ma in un oggetto apposito che incapsula la logica di iterazione, oggetto che prende il nome di "iteratore" (la interfaccia java.util.Iterator serve proprio a questo).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma non devi "toccare" top! Altrimenti è ovvio che alteri la lista!

    codice:
    Nodo nodoCorrente = top;
    
    while (nodoCorrente != null) {
        // usa 'user' di nodoCorrente
        nodoCorrente = nodoCorrente.utentePresentato;
    }
    Il while che ho scritto, scorre tutta la lista, senza alterarla. E qualunque cosa vuoi fare con 'user' la devi fare dentro il while.
    Se vuoi invece fare un metodo che estrae il "prossimo" elemento, devi mantenere lo "stato" del nodo corrente da qualche parte. Preferibilmente non in SocialPlatform ma in un oggetto apposito che incapsula la logica di iterazione, oggetto che prende il nome di "iteratore" (la interfaccia java.util.Iterator serve proprio a questo).
    Allora ho fatto come hai detto tu (non posso usare l'interfaccia Iterator...a tal proposito un chiarimento: ho capito male o è possibile usarla solo in classi astratte?):

    codice:
        public void stampaUtenti() {
            Nodo nodoCorrente = top;
            while (nodoCorrente != null) {
                nodoCorrente = nodoCorrente.utentePresentato;
                System.out.println(nodoCorrente);
            }
        }
    Ma mi stampa questa roba:
    socialplatform.SocialPlatform$Nodo@48dbb335
    socialplatform.SocialPlatform$Nodo@4fd281f1
    socialplatform.SocialPlatform$Nodo@5511e28
    null

    (ho definito appunto 4 utenti)

    Eppure in Utente il toString di object l'ho ridefinito. Non ci capisco più niente

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Allora ho fatto come hai detto tu (non posso usare l'interfaccia Iterator...a tal proposito un chiarimento: ho capito male o è possibile usarla solo in classi astratte?):
    Ok se non puoi usare Iterator.
    Iterator però non centra nulla di per sé con il fatto che sia usato (o implemento) in una classe astratta o no.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    codice:
            while (nodoCorrente != null) {
                nodoCorrente = nodoCorrente.utentePresentato;
                System.out.println(nodoCorrente);
    Ma mi stampa questa roba:
    socialplatform.SocialPlatform$Nodo@48dbb335
    socialplatform.SocialPlatform$Nodo@4fd281f1
    socialplatform.SocialPlatform$Nodo@5511e28
    null

    (ho definito appunto 4 utenti)

    Eppure in Utente il toString di object l'ho ridefinito. Non ci capisco più niente
    Innanzitutto hai scambiato l'ordine: prima devi stampare, poi prendere il successivo. Altrimenti ti "perdi" il primo utente.

    Inoltre il println sta stampando l'oggetto Nodo ... non l'Utente. Io infatti nell'altro messaggio ho scritto:
    codice:
    // usa 'user' di nodoCorrente
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ok, avevo capito che sto cercando di stampare l'oggetto Nodo...il punto è che non capisco come fargli stampare l'utente associato al nodo! Anche perché in quel frangente non esiste ancora nessun utente definito...

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    il punto è che non capisco come fargli stampare l'utente associato al nodo!
    nodoCorrente.user

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Anche perché in quel frangente non esiste ancora nessun utente definito...
    In che senso? Se nodoCorrente != null (cioè non è il utentePresentato dell'ultimo nodo, che vale null perché non punta ad un altro Nodo), allora hai il riferimento ad un Nodo e il suo user è sicuramente != null perché l'avevi testato nel push.

    Quindi all'inizio del corpo del while: hai sicuramente un Nodo e sicuramente il suo Utente.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.