Liste varie

di il
61 risposte

61 Risposte - Pagina 2

  • Re: Liste varie

    Tutto questo mi è chiaro, ma ancora non ho capito perché non mi fa usare l'oggetto che ho messo nel nodo, se lo richiamo dall'head di stack

    andbin ha scritto:


    Se non riesci ad implementare un banale stack con push/pop fatto a nodi (con o senza esporre i nodi) .... si presupporrebbe che difficilmente riusciresti ad affrontare cose più "avanzate" ....
    io sono uno zuccone, per capire devo avere davanti a me esempi concreti di codice
    esempio, se te mi facessi vedere, possibilmente anche la costruzione di, un codice, per tirare in ballo qualcosa che conosco un pochino, di un'applicazione multiframe (la butto la) e mi spiegassi passo passo il perché/cosa stai facendo, io la volta dopo son in grado di farti circa il 60% del programma da solo. ma se mi si continua a spiegare la teoria, con disegnetti etc, e nessun esempio di codice, non ho difficoltà ad ammettere che per cose di cui non riesco ad immaginare un uso pratico, non riesco a fare codice, non riesco a immedesimarmi nel contesto e tutto.
    non so se mi son spiegato bene
  • Re: Liste varie

    Se Stack ha getHead() e Node ha getData() e getLink() questo è il modo di iterare sulla lista "fuori" dal controllo di Stack:
    Stack<Oggetto> stack = ............
    //.......
    Node<Oggetto> nodo = stack.getHead();
    
    while (nodo != null) {
        Oggetto ogg = nodo.getData();
        System.out.println("Oggetto in nodo: " + ogg);
        nodo = nodo.getLink();
    }
  • Re: Liste varie

    A tirare fuori i dati dal nodo fuori dalla lista, ci son riuscito, anche se in maniera diversa, un semplice nodo.getData() è stato sufficiente.
    non capisco perché questa parte di codice è sbagliata
    
    Stack<Node> s = new Stack<>();
            s.add((Node)n);
            System.out.println(s.getHead().getData().getTesto());
    
    avendo un solo elemento nello stack, mi basta tirare fuori l'head o mi sbaglio? voglio automaticamente quello contiene tutte le informazioni del nodo, e non ho fatto nulla di diverso da qua
    System.out.println(n.getData().getTesto());
    se non tirarlo fuori dalla lista con getHead().
  • Re: Liste varie

    KuroKami69 ha scritto:


    
    Stack<Node> s = new Stack<>();
    
    Stack<Node> NON ha senso. La parametrizzazione concreta qui deve essere il tipo di dato nei nodi .... non il Node stesso!
  • Re: Liste varie

    Ah avevo sistemato la classe stack ma ho scordato di sistemare anche il main...
  • Re: Liste varie

    
    public E extract()
        {
            if(isEmpty())
            throw new EmptyStackException();
            else
            {
                Node<E> tmp = head.getLink();
                head = head.getLink().getLink();
                tmp.setLink(null);
                return tmp;
            }
            
        }
    ebbene si sto impazzendo.
    sono sicuro che sia sbagliato qualcosa, ma al momento non riesco ad arrivarci. uso un nodo temporaneo per salvarmi ciò a cui punta l'head.
    assegno ad head ciò a cui punta il nodo a cui puntava head. metto a null il link del nodo che tiro fuori. lo ritorno.
    mi dice che i tipi sono incompatibili, quindi ho fatto
    return (E)tmp;
    ora, quanto di ciò che ho fatto è sbagliato?
  • Re: Liste varie

    KuroKami69 ha scritto:


    
                Node<E> tmp = head.getLink();
                head = head.getLink().getLink();
                tmp.setLink(null);
                return tmp;
    uso un nodo temporaneo per salvarmi ciò a cui punta l'head.
    assegno ad head ciò a cui punta il nodo a cui puntava head. metto a null il link del nodo che tiro fuori. lo ritorno.
    mi dice che i tipi sono incompatibili
    Una premessa innanzitutto: se head NON è null, allora sta facendo riferimento al PRIMO nodo.
    Il tuo tmp non contiene il primo nodo .. ma il secondo! Perché sei andato oltre con getLink().

    Quindi semplicemente:

    Node<E> tmp = head;

    Poi devi far "saltare" via quel nodo dalla catena di nodi. Cioè head adesso deve puntare il SECONDO nodo (se esiste, altrimenti è un reference null). Se tmp ora è il primo, allora semplicemente:

    head = tmp.getLink();

    Poi ok
    tmp.setLink(null);
    È una finezza in più. Se i nodi non fossero mai esposti, questo annullamento non servirebbe più di tanto.

    Poi devi ritornare qualcosa. Vuoi restituire il nodo o il dato nel nodo? Se hai messo E come tipo di ritorno, allora vuoi restituire il dato, quindi:

    return tmp.getData();

    Non ha senso (E)tmp . Il nodo è la scatola, il dato è il contenuto nella scatola. Non ha senso "tentare" di convertire la scatola nel contenuto!


    P.S. Davvero era così difficile nonostante mie spiegazioni precedenti e graficini "spammati" da me e prof.?
  • Re: Liste varie

    A livello di logica ho capito tutto. ma se non riesco a immaginarmi un contesto d'uso di quello che faccio, per me è davvero arduo scrivere il codice.
    mi avessero chiesto di controllare quando 2 oggetti si toccano, avrei saputo abbozzare un'idea sicuramente più definita di questa per le pile.
    comunque il metodo extract credo debba restituirmi un nodo, quindi dovrei modificare la firma in Node<E> se non erro.
    comunque non è che a scuola nostra vengano mostrati esempi di codice eh.
    una volta c'era un prof che ti faceva vedere esempi funzionanti di codice, riguardo a ciò che stava per spiegare, ma ora è solo spiegazione teorica, poi ci viene detto "fate voi in base a quanto detto". quindi per me diventa appunto difficile concretizzare qualcosa di cui non vedo l'utilità pratica. in compenso se avessi un insegnante privato, affronterei tutto senza troppi problemi
  • Re: Liste varie

    KuroKami69 ha scritto:


    A livello di logica ho capito tutto. ma se non riesco a immaginarmi un contesto d'uso di quello che faccio, per me è davvero arduo scrivere il codice.
    Capisco, naturalmente, non ti preoccupare. Gli stack comunque i loro usi li hanno.

    KuroKami69 ha scritto:


    mi avessero chiesto di controllare quando 2 oggetti si toccano, avrei saputo abbozzare un'idea sicuramente più definita di questa per le pile.
    Eh .. insomma ... nel senso che per la "collisione" di figure (2D o 3D) c'è tutta una matematica dietro (dipende anche quali figure) ....

    KuroKami69 ha scritto:


    comunque il metodo extract credo debba restituirmi un nodo, quindi dovrei modificare la firma in Node<E> se non erro.
    Va bene, vuol solo dire che esponi il nodo e non solo il dato nel nodo (e a maggior ragione vale quel tmp.setLink(null); ).

    KuroKami69 ha scritto:


    in compenso se avessi un insegnante privato, affronterei tutto senza troppi problemi
    Ma sono mesi che ti sto rispondendo .....
    Tra l'altro in questi ultimi periodi ho mio malgrado molto tempo libero.
  • Re: Liste varie

    andbin ha scritto:


    KuroKami69 ha scritto:


    A livello di logica ho capito tutto. ma se non riesco a immaginarmi un contesto d'uso di quello che faccio, per me è davvero arduo scrivere il codice.
    Capisco, naturalmente, non ti preoccupare. Gli stack comunque i loro usi li hanno.
    non lo metto in dubbio. non vedo però l'utilità di riscrivere da 0, per di più in modo approssimativo, delle classi già esistenti, solo perché sono importanti. sono d'accordo, bisogna sapere la teoria che ci sta dietro, come funzionano e tutto, ma scriverle da 0 non lo capisco.

    andbin ha scritto:


    KuroKami69 ha scritto:


    mi avessero chiesto di controllare quando 2 oggetti si toccano, avrei saputo abbozzare un'idea sicuramente più definita di questa per le pile.
    Eh .. insomma ... nel senso che per la "collisione" di figure (2D o 3D) c'è tutta una matematica dietro (dipende anche quali figure) ....
    si, ho già avuto modo di vedere sul blog di mozilla questo discorso delle collisioni, in 2D e 3D, ma era in C mi pare. comunque non mi è sembrata una cosa così difficile, onestamente

    andbin ha scritto:


    KuroKami69 ha scritto:


    in compenso se avessi un insegnante privato, affronterei tutto senza troppi problemi
    Ma sono mesi che ti sto rispondendo .....
    Tra l'altro in questi ultimi periodi ho mio malgrado molto tempo libero.
    certo, ma sono anche mesi che io sto impazzendo perché non capisco un'h di telecomunicazioni e che sto cercando di convincere un mio amico a studiare il giapponese con me, seriamente sono inoltre mesi in cui, sfortunatamente, ho altro a cui pensare che la programmazione, quindi non sono esattamente concentrato su queste cose.

    ti stai forse offrendo come mio insegnante live?
  • Re: Liste varie

    KuroKami69 ha scritto:


    non vedo però l'utilità di riscrivere da 0, per di più in modo approssimativo
    L'utilità l'ho già detta prima: serve per imparare, per prendere "confidenza" con tutti questi concetti: strutture dati, reference agli oggetti, "logica" di ragionamento, anche i generics volendo come hai visto.
    Serve esercitarsi, in generale. Liste, pile, code, ecc... sono un modo per esercitarsi ma si possono fare anche molti altri esercizi.

    KuroKami69 ha scritto:


    sono inoltre mesi in cui, sfortunatamente, ho altro a cui pensare che la programmazione, quindi non sono esattamente concentrato su queste cose.
    Capisco.

    KuroKami69 ha scritto:


    ti stai forse offrendo come mio insegnante live?
    Beh no .. proprio "live" così no. Ma continua pure a chiedere e perlomeno io, nel limite del possibile, cercherò di rispondere. Al momento ho molto tempo libero ma solamente perché purtroppo a Dicembre ho perso il lavoro ...
  • Re: Liste varie

    Ah mi spiace sentire tale triste notizia sfortunatamente, sono in grado di, in parte, capirti, visto che è successo pure a me, un paio di anni fa, dopo essere rimasto senza paga per 5 mesi.

    @EDIT:
    senza fare un altro post.
    il metodo delete, sarà identico a extract, messo pochi messaggi sopra, senza il return
    
    public void delete()
        {
            if(isEmpty())
            throw new EmptyStackException();
            else
            {
                Node<E> tmp = head;
                head = head.getLink();
                tmp.setLink(null);
            }
        }
    giusto?
  • Re: Liste varie

    KuroKami69 ha scritto:


    il metodo delete, sarà identico a extract, messo pochi messaggi sopra, senza il return

    giusto?
    Sì, tecnicamente è corretto. Anche se forse meno utile. Se uno vuole eliminare il primo nodo, può invocare extract() semplicemente ignorando il valore di ritorno.
  • Re: Liste varie

    andbin ha scritto:


    KuroKami69 ha scritto:


    il metodo delete, sarà identico a extract, messo pochi messaggi sopra, senza il return

    giusto?
    Sì, tecnicamente è corretto. Anche se forse meno utile. Se uno vuole eliminare il primo nodo, può invocare extract() semplicemente ignorando il valore di ritorno.
    si ma la logica è differente. voglio dire, extract è vero che mette a null i link, ma non è quello il suo scopo.

    ho provato a fare anche il metodo size()
    
    public int size()
        {
            int size = 1;
            if(isEmpty())
            return 0;
            else
            {
                while(head.getLink() != null)
                {
                    Node<E> tmp = head;
                    head = head.getLink();
                    size++;
                }
            }
            return size;
        }
    non mi vengono in mente, al momento soluzioni migliori. se size mi parte da 0, allora mi ritorna n-1 elementi mmh

    @EDIT:
    poi l'ultimo metodo che volevo fare era il pop(index). ho già un'idea su come farlo ma, non credo sia corretta in termini di codice...
    è come per il size solo che il while ciclerà fino all'elemento n mmh
    @EDIT2:
    e avrò anche un bisogno di un vettore d'appoggio dove salvare momentaneamente i nodi per poi ributtarli dentro
  • Re: Liste varie

    KuroKami69 ha scritto:


    si ma la logica è differente. voglio dire, extract è vero che mette a null i link, ma non è quello il suo scopo.
    I tuoi extract() e delete() fanno sostanzialmente la stessa cosa, con l'unica differenza che extract restituisce il nodo tolto e delete no.

    KuroKami69 ha scritto:


    ho provato a fare anche il metodo size()
    Puoi fare molto meglio! Guarda l'esempio di iterazione che avevo fatto in precedenza.

    KuroKami69 ha scritto:


    @EDIT:
    poi l'ultimo metodo che volevo fare era il pop(index). ho già un'idea su come farlo ma, non credo sia corretta in termini di codice...
    è come per il size solo che il while ciclerà fino all'elemento n mmh
    @EDIT2:
    e avrò anche un bisogno di un vettore d'appoggio dove salvare momentaneamente i nodi per poi ributtarli dentro
    Cosa fa esattamente pop(index)? Estrae solo il nodo a index ... o tutti i nodi fino a index?
    Comunque non dovresti aver bisogno di alcun array di appoggio.
Devi accedere o registrarti per scrivere nel forum
61 risposte