2011-09-29 2 views
-1

Nous apprenons à propos de la liste chaînée en utilisant des nœuds et je ne suis pas sûr si je fais cela correctement. Nous sommes supposés faire une simple liste mais quand j'exécute le programme, j'obtiens nullpointerException pointant vers la méthode showList() mais quand j'essaye de ne pas utiliser cette méthode, alors rien ne s'imprime du tout. S'il vous plaît toute aide est grandement appréciée.Liste utilisant des nœuds

public class node { 
     public int dataitems; 
     public node next; 
     node front; 

public void initList(){ 
    front = null; 
} 

public node makeNode(int number){ 
    node newNode; 
    newNode = new node(); 
    newNode.dataitems = number; 
    newNode.next = null; 
    return newNode; 
} 

public boolean isListEmpty(node front){ 
    boolean balance; 
    if (front == null){ 
     balance = true; 
    } 
    else { 
     balance = false; 
    } 
    return balance; 

} 

public node findTail(node front) { 
    node current; 
    current = front; 
    while(current.next != null){ 
     //System.out.print(current.dataitems); 
     current = current.next; 

    } //System.out.println(current.dataitems); 
    return current; 
} 

public void addNode(node front ,int number){ 
    node tail; 
    if(isListEmpty(front)){ 
     front = makeNode(number); 
    } 
    else { 
     tail = findTail(front); 
     tail.next = makeNode(number); 
    } 
} 

public void printNodes(int len){ 

    int j; 
    for (j = 0; j < len; j++){ 
     addNode(front, j); 
    } showList(front); 
} 

public void showList(node front){ 
    node current; 
    current = front; 
    while (current.next != null){ 
     System.out.print(current.dataitems); 
     current = current.next; 
    } 
    System.out.println(current.dataitems); 
} 


public static void main(String[] args) { 
    node x = new node(); 

    x.printNodes(50); 
    } 

     } 

Répondre

1

Le problème a trait à la portée de la variable de votre méthode addNode.

public void addNode(node front ,int number){ 
    node tail; 
    if(isListEmpty(front)){ 
     front = makeNode(number); //reassigns the node front parameter 
    } 
    else { 
     tail = findTail(front); 
     tail.next = makeNode(number); 
    } 
} 

Votre mission de "front" n'attribue la valeur à la variable locale makeNode (nombre). Vous devez utiliser this.front pour assigner makeNode (nombre) à la variable d'instance de votre classe de noeud ou refactoriser votre nom de variable.

public void addNode(node front ,int number){ 
    node tail; 
    if(isListEmpty(front)){ 
     //assigns a value to the member variable "front" of your node instance 
     this.front = makeNode(number); 
    } 
    else { 
     tail = findTail(front); 
     tail.next = makeNode(number); 
    } 
} 
+0

merci cela a fonctionné parfait – TMan

1

Pour ce faire,

node current; 
current = front; 

mais vous ne front initiale, donc quand vous appelez current.next, current est nulle. Donc, vous ne pouvez pas obtenir la prochaine ...

En aparté, pourquoi ne pas nettoyer le code et faire

node current = front; 

De plus, les noms de classe en Java doivent être capitalisées, donc node devrait être Node.

Questions connexes