NullPointerException - LinkedList

时间:2016-03-02 16:47:17

标签: java

Okey,我不知道为什么我得到这个NullPointException。我现在已经好几个小时了,我疯了! 也许你们中的一些人可以帮助我。如果你需要更多的信息,我会试着给它,只要问4。

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;
}

} // class

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;
}

} // class

1 个答案:

答案 0 :(得分:0)

您没有初始化hobbyer变量。您甚至在null的构造函数中将其设置为Medlem

尝试

hobbyer = new KjedetMengde<Hobby>();

Medlem课程的第8行或第13行。