2016-03-02 60 views
0

Okey,我不知道爲什麼我得到這個NullPointException。我一直在努力幾個小時,我瘋了! 也許你們中的一些人可以幫助我。如果你需要更多的信息,我會試着給它,只要問它4。NullPointerException - LinkedList

This is a link to a picture - CLICK ME! - NullPointerException

public class KjedetMengde<T> implements MengdeADT<T> { 

private static Random rand = new Random(); 
private int antall; // antall elementer i mengden 
private LinearNode<T> start; 

/** 
* Oppretter en tom mengde. 
*/ 
public KjedetMengde() { 
    antall = 0; 
    start = null; 
}// 

@Override 
public void leggTil(T element) { 
    if (!(inneholder(element))) { 
     LinearNode<T> node = new LinearNode<T>(element); 
     node.setNeste(start); 
     start = node; 
     antall++; 
    } 
} 

public void leggTilAlle(MengdeADT<T> m2) { 
    Iterator<T> teller = m2.oppramser(); 
    while (teller.hasNext()) { 
     leggTil(teller.next()); 
    } 
} 

@Override 
public T fjernTilfeldig() { 
    LinearNode<T> forgjenger, aktuell; 
    T resultat = null; 
    if (!erTom()) { 
     int valg = rand.nextInt(antall) + 1; 
     if (valg == 1) { 
      resultat = start.getElement(); 
      start = start.getNeste(); 
     } else { 
      forgjenger = start; 
      for (int nr = 2; nr < valg; nr++) { 
       forgjenger = forgjenger.getNeste(); 
      } 
      aktuell = forgjenger.getNeste(); 
      resultat = aktuell.getElement(); 
      forgjenger.setNeste(aktuell.getNeste()); 
     } 
     antall--; 
    } // if 
    return resultat; 
}// 

@Override 
public T fjern(T element) { 
    boolean funnet = false; 
    LinearNode<T> forgjenger = null; 
    LinearNode<T> aktuell = null; 
    T resultat = null; 
    if (!erTom()) { 
     if (start.getElement().equals(element)) { 
      resultat = start.getElement(); 
      start = start.getNeste(); 
      antall--; 
     } else { 
      forgjenger = start; 
      aktuell = start.getNeste(); 
      for (int i = 1; i < antall && !funnet; i++) { 
       if (aktuell.getElement().equals(element)) { 
        funnet = true; 
       } else { 
        forgjenger = aktuell; 
        aktuell = aktuell.getNeste(); 
       } 
      } 
     } 
     if (funnet) { 
      resultat = aktuell.getElement(); 
      forgjenger.setNeste(aktuell.getNeste()); 
      antall--; 
     } 
    } 
    return resultat; 
}// 

@Override 
public MengdeADT<T> union(MengdeADT<T> m2) {// OBS! En bedre i kladdeopg4 
    KjedetMengde<T> begge = new KjedetMengde<T>(); 
    LinearNode<T> aktuell = start; 
    while (aktuell != null) { 
     begge.leggTil(aktuell.getElement()); 
     aktuell = aktuell.getNeste(); 
    } // while 
    Iterator<T> teller = m2.oppramser(); 
    while (teller.hasNext()) { 
     begge.leggTil(teller.next()); 
    } 
    return begge; 
}// 

private void settInn(T element) { 
    LinearNode<T> nyNode = new LinearNode<T>(element); 
    nyNode.setNeste(start); 
    start = nyNode; 
    antall++; 
} 

@Override 
public boolean inneholder(T element) { 
    boolean funnet = false; 
    LinearNode<T> aktuell = start; 
    for (int søk = 0; søk < antall && !funnet; søk++) { 
     if (aktuell.getElement().equals(element)) { 
      funnet = true; 
     } else { 
      aktuell = aktuell.getNeste(); 
     } 
    } 
    return funnet; 
} 

@Override 
public boolean erLik(MengdeADT<T> m2) { 
    boolean likeMengder = true; 
    T element = null; 
    if (antall() == m2.antall()) { 
     Iterator<T> teller = m2.oppramser(); 
     while (teller.hasNext() && likeMengder) { 
      element = teller.next(); 
      if (!this.inneholder(element)) { 
       likeMengder = false; 
      } 
     } 
    } 
    return likeMengder; 
} 

@Override 
public boolean erTom() { 
    return antall == 0; 
} 

@Override 
public int antall() { 
    return antall; 
} 

@Override 
public Iterator<T> oppramser() { 
    return new KjedetIterator<T>(start); 
} 

@Override 
public MengdeADT<T> snitt(MengdeADT<T> m2) { 

    KjedetMengde<T> kjede = new KjedetMengde<T>(); 
    KjedetMengde<T> snitt = new KjedetMengde<T>(); 
    LinearNode<T> aktuell = start; 

    while (aktuell != null) { 
     kjede.leggTil(aktuell.getElement()); 
     aktuell = aktuell.getNeste(); 
    } 

    Iterator<T> teller = m2.oppramser(); 

    while (teller.hasNext()) { 
     T element = teller.next(); 
     if (kjede.inneholder(element)) { 
      snitt.leggTil(element); 
     } 
    } 

    return snitt; 
} 

@Override 
public MengdeADT<T> differans(MengdeADT<T> m2) { // (m1- m2) 
    KjedetMengde<T> kjede = new KjedetMengde<T>(); 
    LinearNode<T> aktuell = start; 

    while (aktuell != null) { 
     kjede.leggTil(aktuell.getElement()); 
     aktuell = aktuell.getNeste(); 
    } 

    Iterator<T> teller = m2.oppramser(); 

    while (teller.hasNext()) { 
     T element = teller.next(); 
     if (kjede.inneholder(element)) { 
      kjede.fjern(element); 
     } 
    } 

    return kjede; 
} 

public String toString() { 
    String resultat = " "; 
    LinearNode<T> aktuell = start; 
    while (aktuell != null) { 
     resultat += aktuell.getElement().toString() + "\t"; 
     aktuell = aktuell.getNeste(); 
    } 
    return resultat; 
} 

} //類

public class Hobby { 

private String hobbyNavn; 

public Hobby (String hobby) { 
    hobbyNavn = hobby; 
} 

public String toString() { 
    return ("< " + hobbyNavn + " >"); 
} 

public boolean equals (Object hobby2) { 
    Hobby hobbyDenAndre = (Hobby) hobby2; 
    return(hobbyNavn.equals(hobbyDenAndre.getHobbyNavn())); 
} 

public String getHobbyNavn() { 
    return hobbyNavn; 
} 

} //類

回答

0

你沒有初始化的變量hobbyer。你甚至可以在Medlem的構造函數中將它設置爲null

Medlem類嘗試

hobbyer = new KjedetMengde<Hobby>(); 

在任一線路8或13。

+0

沒有看到! xD它確實解決了我的問題,謝謝! – iIllumination