boysna
10-11-2004, 17:03
Perchè m lancia la NullPointrException?
L'unica cosa ke scrive è "la lista ha x elementi". Poi l'eccezione "java.lang.NullPointerException
at implementazione_di_uno_stack.classe_testante.main(classe_testante.java:124)"
Queste sono le 3 classi:
si tratta di implementare una lista concatenata:
public class classe_testante {
public static void main(String[] args)
{
LinkList lista = new LinkList(); //Crea nuova lista
Link head = new Link(); //Crea il primo nodo della lista
Link tail = new Link(); //Crea l'ultimo nodo della lista
String num_oggetti_input_lista =
JOptionPane.showInputDialog("Oggetti da inserire nella lista?");
int num_oggetti_lista = Integer.parseInt(num_oggetti_input_lista);
for (int i=0; i < num_oggetti_lista; i++)
{
String oggetto_inserito_input =
JOptionPane.showInputDialog("Inserisci l'elemento successivo");
Object o = oggetto_inserito_input;
lista.insertFirst(o, lista.head); //Inserisce tutti i link inseriti dall'utente
}
System.out.println("La lista ha " + lista.size() + " elementi");
System.out.println("L'elemento nell'head è " + lista.head.getElement());
Link temp = lista.head.getNext();
System.out.println("e il suo successore ha come elemento " + temp.getElement() +
"l'ultimo ha come elemento " + lista.tail.getElement());
lista.head.setElement("ADRIANO");
System.out.println("L'elemento del primo nodo è stato sostituito con" + lista.head.getElement());
lista.head.setNext(tail);
System.out.println("Il Next del primo nodo è stato sostituito con l'ultimo che ha come elemento:" + lista.tail.getElement());
if(lista.isEmpty())
System.out.println("lista vuota");
else {
System.out.println("lista non vuota");
System.out.println("Ora ci sono " + lista.size() + " elementi in lista");}
lista.insertLast("sono l'ultimo x default");
System.out.println("E'stato inserito l'ultimo x default che è:" + lista.tail.getElement());
lista.deleteLast();
System.out.println("L'ultimo è di nuovo:" + lista.tail.getElement());
//vengono usati tutti i metodi
System.exit(0);
}
}
public class LinkList
{
public Link head; // riferimento al primo link della lista
public Link tail; // riferimento all'ultimo link della lista
public int size = 0; //la taglia della lista all'inizio è 0
public Link temp;
public void LinkList()
{
head = null;
tail = null; // ancora nessun link nella lista
}
public boolean isEmpty() //verifica se la lista è vuota o meno
{
return (head == null);
}
public void insertFirst(Object e, Link head) // inserimento all'inizio della lista
{
Link newLink = new Link(e, head);
head = newLink;
if (tail == null){tail = newLink;}
tail = head;
size ++;
}
public Link deleteFirst() throws StackEmptyException // cancellazione all'inizio della lista
{
if(isEmpty()) {
throw new StackEmptyException("no");
}
if(head == tail)
{
Link temp = head;
head = tail = null;
size --;
return temp;
}
else {
Link temp = head;
head = head.next;}
size--;
return temp;
}
public int size() //restituisce il numero di link nella lista
{
return size;
}
public void insertLast(Object e) //inserimento alla fine
{
Link newLink = new Link(e, null);
if( tail!= null ) {
tail.next = newLink;
tail = tail.next; }
else
{head = tail = newLink;}
size ++;
}
public void deleteLast() throws StackEmptyException //cancellazione alla fine
{
if(isEmpty()){throw new StackEmptyException("no");}
else if(head == tail){ head = tail = null; size --;}
else {
Link current = head;
Link temp = tail;
while(current.next != tail){
current = current.next;
}
tail = current;
current.next = null;
temp = null;
size --;
}
}
}
class Link
{
public Object element;
public Link next;
public Link (Object e, Link n) //Ogni link ha un elemento e un puntatore al prossimo link
{
element = e;
next = n;
}
public Link ()
{
this(null, null);
}
public Object getElement() //Restituisce l'elemento del link
{
return element;
}
public Link getNext() //Restituisce il link successivo
{
return next;
}
public void setElement(Object newElement) //Imposta un nuovo elemento al posto di quello precedente
{
element = newElement;
}
public void setNext(Link newNext) //Imposta un nuovo link successivo al posto di quello ke c'era prima
{
next = newNext;
}
}
L'unica cosa ke scrive è "la lista ha x elementi". Poi l'eccezione "java.lang.NullPointerException
at implementazione_di_uno_stack.classe_testante.main(classe_testante.java:124)"
Queste sono le 3 classi:
si tratta di implementare una lista concatenata:
public class classe_testante {
public static void main(String[] args)
{
LinkList lista = new LinkList(); //Crea nuova lista
Link head = new Link(); //Crea il primo nodo della lista
Link tail = new Link(); //Crea l'ultimo nodo della lista
String num_oggetti_input_lista =
JOptionPane.showInputDialog("Oggetti da inserire nella lista?");
int num_oggetti_lista = Integer.parseInt(num_oggetti_input_lista);
for (int i=0; i < num_oggetti_lista; i++)
{
String oggetto_inserito_input =
JOptionPane.showInputDialog("Inserisci l'elemento successivo");
Object o = oggetto_inserito_input;
lista.insertFirst(o, lista.head); //Inserisce tutti i link inseriti dall'utente
}
System.out.println("La lista ha " + lista.size() + " elementi");
System.out.println("L'elemento nell'head è " + lista.head.getElement());
Link temp = lista.head.getNext();
System.out.println("e il suo successore ha come elemento " + temp.getElement() +
"l'ultimo ha come elemento " + lista.tail.getElement());
lista.head.setElement("ADRIANO");
System.out.println("L'elemento del primo nodo è stato sostituito con" + lista.head.getElement());
lista.head.setNext(tail);
System.out.println("Il Next del primo nodo è stato sostituito con l'ultimo che ha come elemento:" + lista.tail.getElement());
if(lista.isEmpty())
System.out.println("lista vuota");
else {
System.out.println("lista non vuota");
System.out.println("Ora ci sono " + lista.size() + " elementi in lista");}
lista.insertLast("sono l'ultimo x default");
System.out.println("E'stato inserito l'ultimo x default che è:" + lista.tail.getElement());
lista.deleteLast();
System.out.println("L'ultimo è di nuovo:" + lista.tail.getElement());
//vengono usati tutti i metodi
System.exit(0);
}
}
public class LinkList
{
public Link head; // riferimento al primo link della lista
public Link tail; // riferimento all'ultimo link della lista
public int size = 0; //la taglia della lista all'inizio è 0
public Link temp;
public void LinkList()
{
head = null;
tail = null; // ancora nessun link nella lista
}
public boolean isEmpty() //verifica se la lista è vuota o meno
{
return (head == null);
}
public void insertFirst(Object e, Link head) // inserimento all'inizio della lista
{
Link newLink = new Link(e, head);
head = newLink;
if (tail == null){tail = newLink;}
tail = head;
size ++;
}
public Link deleteFirst() throws StackEmptyException // cancellazione all'inizio della lista
{
if(isEmpty()) {
throw new StackEmptyException("no");
}
if(head == tail)
{
Link temp = head;
head = tail = null;
size --;
return temp;
}
else {
Link temp = head;
head = head.next;}
size--;
return temp;
}
public int size() //restituisce il numero di link nella lista
{
return size;
}
public void insertLast(Object e) //inserimento alla fine
{
Link newLink = new Link(e, null);
if( tail!= null ) {
tail.next = newLink;
tail = tail.next; }
else
{head = tail = newLink;}
size ++;
}
public void deleteLast() throws StackEmptyException //cancellazione alla fine
{
if(isEmpty()){throw new StackEmptyException("no");}
else if(head == tail){ head = tail = null; size --;}
else {
Link current = head;
Link temp = tail;
while(current.next != tail){
current = current.next;
}
tail = current;
current.next = null;
temp = null;
size --;
}
}
}
class Link
{
public Object element;
public Link next;
public Link (Object e, Link n) //Ogni link ha un elemento e un puntatore al prossimo link
{
element = e;
next = n;
}
public Link ()
{
this(null, null);
}
public Object getElement() //Restituisce l'elemento del link
{
return element;
}
public Link getNext() //Restituisce il link successivo
{
return next;
}
public void setElement(Object newElement) //Imposta un nuovo elemento al posto di quello precedente
{
element = newElement;
}
public void setNext(Link newNext) //Imposta un nuovo link successivo al posto di quello ke c'era prima
{
next = newNext;
}
}