Pages: [1]   Go Down
Print
Author Topic: toString() Linked List semplice  (Read 1367 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« on: 04-11-2011, 01:56:18 »

Ragazzi potreste aiutarmi a creare un main di 2 3 righe che mi faccia capire ,stampando ad es: 3-->2-->1, come funziona la linked list semplice ?

CLASSE NODO:

Code:
public class Nodo
{
private int a;
private Nodo next;

public Nodo(int a,Nodo next)
{
this.a=a;
this.next=next;
}

public int getElement()
{
return a;
}

public Nodo getNext()
{
return next;
}

public void setElement(int x)
{
a=x;
}

public void setNext(Nodo x)
{
x=next;
}

}



CLASSE SLINKEDLIST
Code:
public class SLinkedList
{
private Nodo testa;
private int numero_di_nodi;
private Nodo coda;

public SLinkedList()
{
testa=coda=null;
numero_di_nodi=0;
}

public Nodo getTesta()
{
return testa;
}

public Nodo getCoda()
{
return coda;
}

public void aggiungi_inizio(Nodo v)
{
v.setNext(testa);
testa=v;
numero_di_nodi++;
}

public void aggiungi_fine(Nodo v)
{
v.setNext(null);
coda.setNext(v);
coda=v;
numero_di_nodi++;
}

public int numero_nodi()
{
return numero_di_nodi;
}

public void rimuovi_primo() throws Exception
{
if(testa==null) throw new Exception("Non ci sono più elementi ! ");

Nodo t=testa;

testa=testa.getNext();

t.setNext(null);

numero_di_nodi--;
}

public String toString()
{
Nodo temp;

temp=testa;
String s=" ";

while(temp!=null)
{
s+=temp.getElement()+" ";
temp=temp.getNext();
}

return s;
}

}

Io ho provato a fare un main:

Code:
public class prova
{
public static void main(String [] args)
{
Nodo a = new Nodo (1,null);
Nodo b = new Nodo (2,null);
Nodo c = new Nodo (3,null);

                SLinkedList A = new SLinkedList();

A.aggiungi_inizio(a);
A.aggiungi_inizio(b);
A.aggiungi_inizio(c);

System.out.println(A.toString());

}
}

però mi stampa solo "3"     Non dovrebbe stamparmi 3 2 1 ? Dov'è che sbaglio  testate

Grazie in anticipo  
« Last Edit: 04-11-2011, 03:02:32 by Jack&Daxter » Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 04-11-2011, 10:26:40 »

Dov'è che sbaglio  testate?
Qui:
Code:
public void setNext(Nodo x)
{
x=next;
}
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #2 on: 04-11-2011, 14:02:33 »

Ah certo grazie mille !!!! Doveva essere next=n  pray

Però quando vado a chiamare il metodo A.aggiungi_fine(nodo) il compilatore mi segnala un errore in questo metodo:

Code:
public void aggiungi_fine(Nodo v)
{
v.setNext(null);
coda.setNext(v);
coda=v;
numero_di_nodi++;
}

Code:
Exception in thread "main" java.lang.NullPointerException
at SLinkedList.aggiungi_fine(SLinkedList.java:38)
at prova.main(prova.java:19)

C'è qualcosa che non va in questo metodo ?  
 
« Last Edit: 04-11-2011, 14:05:31 by Jack&Daxter » Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #3 on: 04-11-2011, 14:49:07 »

Forse il problema è che nell' inserimento non si tiene bene conto della testa e della coda.....io ho scritto così il metodo e mi sembra funzionare:

Code:
public void aggiungi_fine(Nodo v)
{
if(numero_di_nodi==0)                          //controllo se la lista è vuota o meno
coda=testa=v;

else
{
coda.setNext(v);
coda=v;
}

  numero_di_nodi++;

}

Forse se non distingui i casi qualche puntatore resta a null...non so se si può migliorare.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #4 on: 04-11-2011, 15:00:01 »

Grazie mille ma se sostituisco il tuo metodo con il mio purtroppo mi da sempre lo stesso errore !  
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #5 on: 04-11-2011, 15:02:43 »

Grazie mille ma se sostituisco il tuo metodo con il mio purtroppo mi da sempre lo stesso errore !  


Mh.....non ho molto tempo:

Intanto il mio file è questo.

Code:
class Nodo
{
private int a;
private Nodo next;

public Nodo(int a,Nodo next)
{
this.a=a;
this.next=next;
}

public int getElement()
{
return a;
}

public Nodo getNext()
{
return next;
}

public void setElement(int x)
{
a=x;
}

public void setNext(Nodo x)
{
next=x;
}

}

class SLinkedList
{
private Nodo testa;
private int numero_di_nodi;
private Nodo coda;

public SLinkedList()
{
testa=coda=null;
numero_di_nodi=0;
}

public Nodo getTesta()
{
return testa;
}

public Nodo getCoda()
{
return coda;
}

public void aggiungi_inizio(Nodo v)
{
if(numero_di_nodi==0)                                 //controllo se la lista è vuota o meno
coda=testa=v;

else{

   v.setNext(testa);
   testa=v;
}

 numero_di_nodi++;
}

public void aggiungi_fine(Nodo v)
{
if(numero_di_nodi==0)                          //controllo se la lista è vuota o meno
coda=testa=v;

else
{
coda.setNext(v);
coda=v;
}

 numero_di_nodi++;

}

public int numero_nodi()
{
return numero_di_nodi;
}

public void rimuovi_primo() throws Exception
{
if(testa==null) throw new Exception("Non ci sono più elementi ! ");

Nodo t=testa;

testa=testa.getNext();

t.setNext(null);

numero_di_nodi--;
}

public String toString()
{
Nodo temp=testa;
String s=" ";

while(temp!=null)
{
s+=temp.getElement()+" ";
temp=temp.getNext();
}

return s;
}

}
public class prova
{
public static void main(String [] args)
{
Nodo a = new Nodo (1,null);
Nodo b = new Nodo (2,null);
Nodo c = new Nodo (3,null);
Nodo d = new Nodo (4,null);

                SLinkedList A = new SLinkedList();

A.aggiungi_fine(a);
A.aggiungi_fine(b);
A.aggiungi_fine(c);
A.aggiungi_fine(d);


System.out.println(A.toString());

}
}

Prova questo codice, dovrebbe andare.
« Last Edit: 04-11-2011, 15:12:24 by Daréios89 » Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #6 on: 04-11-2011, 15:18:18 »

grazie mille funziona tutto  yoh  !!!  . ok
Logged
callo
Forumista
***
Offline Offline

Gender: Male
Posts: 564


"Quanto manca alla vetta?";"Tu sali e non pensare"


« Reply #7 on: 05-11-2011, 19:41:08 »

Sei sicuro che ti funziona tutto???O almeno sei sicuro che i metodi di inserimento funzionano???Dovrei reinstallare la jdk però c'è qualcosa che non mi torna in questa lista....per esempio nel costruttore della lista dichiari testa=coda=null ......e dove dici che la testa punta alla coda(praticamente se io aggiungessi in testa il numero 3 e il numero 27 e controllassi la coda avrei un valore null e non il 3!!)??Secondo me ti converrebbe creare una lista linkata semplice avente solo il nodo testa, quando poi vuoi aggiungere in coda potresti scorrerla tutta e arrivato all'ultimo nodo salvarlo come coda e aggiungere subito dopo!!
Logged

"A cavallina....a cavallina.....a chi era bedda quannu  curreva" [Cit.  Dal Tenerissimo via plebiscito]
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #8 on: 05-11-2011, 22:07:10 »

Al limite, o fare come dice soeca nel costruttore, non so se sempre nel costruttore è superfluo inizializzare a null sia la testa che la coda ma senza farli puntare a vicenda.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #9 on: 06-11-2011, 02:20:22 »

Ok rimedierò a questo errore ! Grazie per il consiglio  yoh 
Logged
Pages: [1]   Go Up
Print
Jump to: