Porque será que eu tenho uma nullPointerException neste código depois de imprimir o último elemento da lista que também tem o valor zero n faço ideia porquê…
o problema está aqui :
public boolean hasNext() { //+
return current.next != null; //+
}
o return.current.next dá um nullpointer
[code]package SegundoTrabalhoSegundaParte;
import java.util.AbstractCollection;
import java.util.Iterator;
import java.util.NoSuchElementException;
@SuppressWarnings(“unchecked”)
public class DLinkedCollection extends AbstractCollection {
// Nó da lista duplamente ligada
private class Node {
private Object element = null; // Referencia para os dados
private Node next; // Referencia para o nó seguinte
private Node prev; // Referencia para o nó anterior
private Node(Object o, Node n, Node p) { element = o; next = n; prev = p; }
private Node() { next = prev = this; }
}
// Iterador da colecção implementada com uma lista duplamente ligada
private class LinkedIterator implements Iterator {
//implementar
private Node current, beforeLast ; //+
int currentIndex; //+
DLinkedCollection owner;
public boolean hasNext() { //+
return current.next != null; //+
}
public boolean hasPrevious() { //+
return current.prev != null; //+
}
//implementar(done)
public Object next() { //+
//FALTA UMA EXCEPTION SE N HOUVER NEXT
//beforeLast = current;
current = current.next; //+ não colokei o beforeLast
currentIndex++; //+
return current.element; //+
}
public Object previous() { //+
//FALTA UMA EXCEPTION SE N HOUVER PREV
current = current.prev; //+
currentIndex--; //+
return current.element; //+
}
//implementar(done)
public void remove() { //+
//FALTA UMA EXCEPCAO SE N HOUVER BEFORELAST
current = beforeLast ; //+
owner.removeNode(beforeLast); //+
beforeLast =null; //+
currentIndex -- ; //+
}
// Implementar (done)
}
Node dummy = new Node();
int size = 0;
public int size() { return size; }
@SuppressWarnings("unchecked")
public Iterator iterator() { return new LinkedIterator(); }
// Adiciona à lista um novo nó depois do nó passado como parâmetro
private void addNode(Node prev, Object element ) {
// Implementar (done but )
if (prev == null || dummy == null)
throw new IllegalStateException();
dummy.next = prev.next;
dummy.prev = prev;
dummy.next.prev = dummy;
dummy.prev.next=dummy ;
dummy.element=element;
++size;
}
// Remove da lista o nó passado como parâmetro
private void removeNode( Node rem ) {
dummy = rem;
dummy.prev.next=dummy.next;
dummy.next.prev=dummy.prev;
--size;
}
public boolean add(Object element){
addNode(dummy.prev, element); return true;
}
public void addFirst(Object element) { addNode(dummy, element); }
public void addLast(Object element) { addNode(dummy.prev, element); }
public void removeFirst() { removeNode(dummy.next); }
public void removeLast() { removeNode(dummy.prev); }
public Object getFirst() {
if ( size == 0 ) throw new NoSuchElementException();
return dummy.next.element;
}
public Object getLast() {
if ( size == 0 ) throw new NoSuchElementException();
return dummy.prev.element;
}
}
[/code]
[code]package SegundoTrabalhoSegundaParte;
public class Test {
public static void escrever( DLinkedCollection l ) {
if ( l.isEmpty() ) System.out.println("Lista vazia");
else {
System.out.println("List" );
System.out.println(" Size: " + l.size() );
System.out.println(" First: " + l.getFirst() );
System.out.println(" Last: " + l.getLast() );
System.out.println(" Valores: " + l );
}
}
public static void main(String[] args) {
DLinkedCollection l = new DLinkedCollection();
for (int i= 1; i < 5; ++ i) /*{*/
l.add( new Integer(i) );/*System.out.println(l.size);}*/
l.addFirst( new Integer(0) );
//System.out.println(l.size);
escrever( l );
for (int i= 4; i <= 5; ++ i)
if ( l.contains(i)) System.out.println("A lista contém o valor " + i);
else System.out.println("A lista não contém o valor " + i);
l.remove(new Integer(1));
System.out.println("Depois de remover o valor 1 " + l);
l.removeFirst();
System.out.println("Depois de remover o primeiro " + l);
l.removeLast();
System.out.println("Depois de remover o ultimo " + l);
}
}
[/code]