Pagina 4 di 4 primaprima ... 2 3 4
Visualizzazione dei risultati da 31 a 38 su 38
  1. #31
    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

  2. #32
    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...

  3. #33
    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

  4. #34
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    nodoCorrente.user
    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.

    Ahhh grazie infinite! Cioè le avevo provate tutte tranne quella più adatta!!
    La lista viene però stampata in ordine inverso, cioè partendo dall'ultimo utente inserito.
    Non è importante, ma per pura curiosità se volessi invertire questa cosa, come potrei fare?

  5. #35
    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
    La lista viene però stampata in ordine inverso, cioè partendo dall'ultimo utente inserito.
    Non è importante, ma per pura curiosità se volessi invertire questa cosa, come potrei fare?
    Tenendo il tuo design attuale:
    a) Creando una lista temporanea (non necessariamente implementata direttamente, anche con una collezione di Java, se vuoi/puoi) che poi iteri o al contrario o creandola già al contrario man mano che iteri quella attuale.
    b) Usando la ricorsione (meno preferibile se ci fossero migliaia di nodi) in cui prima entri in ricorsione e raggiungi il fondo, poi man mano che esci e ritorni indietro stampi gli utenti, che quindi risultano stampati al contrario di adesso.

    Altrimenti cambi design: invece di avere una lista linkata singolarmente ne fai una doppiamente linkata. Il Nodo oltre ad avere utentePresentato avrebbe anche un es. utentePresentatore che punta nell'altro senso. E oltre a 'top' tieni anche un es. 'bottom'.
    Per gestire e aggiornare questi dati aggiuntivi ovviamente ci vuole un pochino di logica in più ma a quel punto "navighi" nella lista avanti e indietro.


    P.S. ho riletto la mia frase "Utente2 è stato presentato da Utente1 il quale non è stato presentato da nessuno" che descriveva lo schemino grafico che avevo fatto. In realtà l'ho descritto al contrario! Scusa, doveva essere "Utente2 ha presentato Utente1 il quale non ha presentato nessuno".
    Che però risulta poco sensata tecnicamente, perché il primo inserito è Utente1 !!!
    Quindi secondo me o cambi nome al campo o cambi il concetto.
    Ultima modifica di andbin; 07-11-2013 a 21:59
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #36
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Tenendo il tuo design attuale:
    a) Creando una lista temporanea (non necessariamente implementata direttamente, anche con una collezione di Java, se vuoi/puoi) che poi iteri o al contrario o creandola già al contrario man mano che iteri quella attuale.
    b) Usando la ricorsione (meno preferibile se ci fossero migliaia di nodi) in cui prima entri in ricorsione e raggiungi il fondo, poi man mano che esci e ritorni indietro stampi gli utenti, che quindi risultano stampati al contrario di adesso.
    Ah giust'appunto ho un altro esercizio da fare dove si deve usare la ricorsione per stampare una lista...

    Altrimenti cambi design: invece di avere una lista linkata singolarmente ne fai una doppiamente linkata. Il Nodo oltre ad avere utentePresentato avrebbe anche un es. utentePresentatore che punta nell'altro senso. E oltre a 'top' tieni anche un es. 'bottom'.
    Per gestire e aggiornare questi dati aggiuntivi ovviamente ci vuole un pochino di logica in più ma a quel punto "navighi" nella lista avanti e indietro.
    Che forse era quello che dovevo fare fin dall'inizio, perché il prof parlava sia di utentePresentato che di utentePresentante...cioè successore e precedente! Non era però molto chiaro nelle specifiche che sono state date a mozzichi.


    P.S. ho riletto la mia frase "Utente2 è stato presentato da Utente1 il quale non è stato presentato da nessuno" che descriveva lo schemino grafico che avevo fatto. In realtà l'ho descritto al contrario! Scusa, doveva essere "Utente2 ha presentato Utente1 il quale non ha presentato nessuno".
    Che però risulta poco sensata tecnicamente, perché il primo inserito è Utente1 !!!
    Quindi secondo me o cambi nome al campo o cambi il concetto.
    Non ho capito di quale campo stai parlando!
    Grazie

  7. #37
    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
    Non ho capito di quale campo stai parlando!
    Grazie
    Stavo parlando del fatto che per come hai denominato il campo ("utentePresentato") e per come hai gestito la lista, il concetto di "presentato" non è molto chiaro/sensato.
    Se inserisci Utente1 e poi Utente2, nel nodo di Utente2 c'è scritto sostanzialmente: utentePresentato=Utente1
    Ma come fa Utente2 ad aver presentato Utente1 se quest'ultimo è stato inserito per primo?

    Inoltre il fatto di fare "push" separate es.
    x.push(utente1);
    x.push(utente2);

    Non rende affatto chiaro se c'è un concetto di "presentato" e come è applicato. E tra l'altro, come impedisci che push venga invocato più volte con lo stesso utente o con un utente già inserito in precedenza?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #38
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Stavo parlando del fatto che per come hai denominato il campo ("utentePresentato") e per come hai gestito la lista, il concetto di "presentato" non è molto chiaro/sensato.
    Nella mia testa utentePresentato era il successivo, ma ora ragionando doveva essere nominato come utentePresentante, hai ragione tu.
    Tieni conto che non me lo sono sognato io ma ho preso spunto da una classe che avevo sul libro che implementava una pila, dove appunto il riferimento Nodo si chiamava (non a caso) next! E' un errore allora, dovrebbe essere il previous al limite!


    Inoltre il fatto di fare "push" separate es.
    x.push(utente1);
    x.push(utente2);
    Non rende affatto chiaro se c'è un concetto di "presentato" e come è applicato.
    questo è vero, ma non è molto importante, tieni conto che è solo un esercizio, e il prof non ha detto niente a riguardo, gli ho mandato l'ultima versione del codice e ha detto che va bene

    E tra l'altro, come impedisci che push venga invocato più volte con lo stesso utente o con un utente già inserito in precedenza?
    nel testo dell'esercizio non era richiesta una cosa del genere (ma la tua obiezione è sicuramente sensata, se questo fosse il progetto per un vero software )
    gli unici vincoli erano "un utente può presentare solo un utente ed entrare solo se presentato da un altro utente" e mi pare che su questo ci siamo.

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.