java - Queue copy constructor -


i'm not sure if there wrong copy constructor queue (dsqueue) or if there reason problem. copy constructor seems copy contents fine if try manipulate queue copied, program fails. i've done testing in queue's main method (see below) , i've run through debugger. ide points out nullpointerexception when try change queue in line testq.list.add(new token(1)); in main method. line gets token fine doesn't begin add method. not sure why...

public class dsqueue extends queue {      public static void main(string[] args) {         dsqueue testq = new dsqueue();          system.out.println("size of testqueue: " + testq.thequeue.size());         testq.offer(new token(100));         testq.offer(new token(200));         system.out.println("size of testqueue after adding: " + testq.thequeue.size());          system.out.println("\ntestqueue: " + testq);          // teting copy constructor         dsqueue newq = new dsqueue(testq);         system.out.println("new queue (should same testqueue): " + newq + " - size: " + newq.size());          system.out.println("\nafter changing 1 queue...");         testq.list.add(new token(1));          system.out.println("testq: " + testq + " - size: " + testq.size());         system.out.println("new queue: " + newq + " - size: " + newq.size());     }      // list containing data     private dslist thequeue;      public dsqueue() {     thequeue = new dslist();     }      public dsqueue(queue s) {         this();          // cast s dsqueue type         dsqueue scasted = (dsqueue)s;          // create reference queue copied         node queuetocopy = scasted.thequeue.head;          while(queuetocopy != null) {             this.offer(queuetocopy.gettoken());             queuetocopy = queuetocopy.next;         }     } }  public abstract class queue {      public dslist list;      public abstract boolean offer(token t);       public abstract token poll();      public abstract token peek();      @override     public abstract string tostring();      public abstract int size();      public abstract boolean isempty(); }  public class dslist implements list {      public node head;      public dslist() {         head = null;     }      public dslist(node head_) {         head = head_;     }      // copy constructor.     public dslist(dslist other) {                 // create reference list copied         node oldlistnode = other.head;            while (oldlistnode != null) {             this.add(oldlistnode.gettoken());             oldlistnode = oldlistnode.next;         }            }      /**      * appends specified element end of list.      * @param obj object add.       * @return true if object has been added list.       *       * @throws nullpointerexception if specified object null.      */     public boolean add(token obj) {         if (obj == null) {             throw new nullpointerexception();         }         // if list empty, add new node front.         if(isempty()) {               // create new node. add token obj data             node newnode = new node(null, null, obj);               // point head new node, newnode             head = newnode;             return true;         } else {              // create reference of start position in list             node current = head;             // while there nodes remaining in list, advance through reach end.             while (current.next != null)                  current = current.next;             // create new node , append end of list, 'prev' pointing current (2nd last node)             node newnode = new node(null, current, obj);             // point old last element newest, last node in list (in next variable)             current.next = newnode;             // return true if successful addition of node.             return true;         }     } }  public class token {      public enum type { operator, operand, paren };     public type type;      private string operator;     private double operand;      public token(double result) {         this.operand = result;         this.type = type.operand;     } }  public class node {      public node next;     public node prev;      // data being stored in each node     private token t;      // node constructor     public node(node next, node prev, token token) {         this.next = next;         this.prev = prev;         this.t = token;     }      public token gettoken() {         return t;     } } 


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -