2017-09-29 2 views
0

Avec cette implémentation d'un LinkedQueue, toutes les méthodes sauf la méthode pop() fonctionnent bien. Lorsque vous utilisez la fenêtre contextuelle() méthode toutes les valeurs de la pile disparaître ce qui en fait vide quand il est censé enlever la première valeur queméthode pop dans implémentée LinkedQueue est en train de supprimer toutes les valeurs et non la première

Voici la classe LinkedQueue

import java.util.NoSuchElementException; 

    public class LinkedQueue 
    { 
     Node front, rear; 
     int size; 

     public LinkedQueue() 
     { 
      front = null; 
      rear = null; 
      size = 0; 
     } 

     public boolean isEmpty() 
     { 
      if(front == null) 
       return true; 
      else 
       return false; 
     } 

     public int getSize() 
     { 
      return size; 
     } 

     public void push(int data) 
     { 
      Node n = new Node(data); 
      if(isEmpty()) 
       front = rear = n; 
      else 
      { 
       rear.setLink(n); 
       rear = n; 
      } 

      size++; 
     } 

     public int pop() 
     { 
      Node temp = new Node(front.getData()); 
      if(isEmpty()) 
      { 
       throw new IllegalAccessError(); 
      } 
      else 
      { 
       front = temp.getLink(); 
       size--; 
      } 

      return temp.getData(); 
     } 

     public int peek() 
     { 
      if (isEmpty()) 
      { 
       throw new NoSuchElementException("Stack is empty."); 
      } 
      else 
      { 
       return front.getData(); 
      } 
     } 

     public String toString() 
     { 
      Node tempFront = front; 
      String returnStr = "Stack: ["; 
      while(tempFront != null) 
      { 
       returnStr += tempFront.getData() + ", "; 
       tempFront = tempFront.getLink(); 
      } 

      returnStr += "]"; 

      return returnStr; 
     } 
    } 

Voici le pilote utilisé pour la classe LinkedQueue:

import java.util.Scanner; 

    public class Driver 
    { 
     public static void main(String[] args) 
     { 
      //declare variables and initialize scanner 
      Scanner key = new Scanner(System.in); 
      int size, choice, value, end; 

      end = 0; 

      //declare and initialize the stack 
      LinkedQueue queue1 = new LinkedQueue(); 

      //loop to continue operations 
      while(end == 0) 
      { 
       //print out menu for commands 
       System.out.println("\t1) Push \n\t2) Pop \n\t3) Peek \n\t4) Size \n\t5) isEmpty \n\t6) End"); 
       System.out.print("Please choose an option: "); 
       choice = key.nextInt(); 

       //switch the choice and execute commands 
       switch (choice) 
       { 
        case 1: System.out.println("Please enter a value: "); 
         value = key.nextInt(); 
         queue1.push(value); 
         System.out.println(queue1.toString()); 
         break; 
        case 2: queue1.pop(); 
         System.out.println(queue1.toString()); 
         break; 
        case 3: queue1.peek(); 
         System.out.println(queue1.peek()); 
         System.out.println(queue1.toString()); 
         break; 
        case 4: System.out.println("Size: " + queue1.getSize()); 
         System.out.println(queue1.toString()); 
         break; 
        case 5: if(queue1.isEmpty()) 
        { 
         System.out.println("Stack is empty."); 
        } 
        else 
         System.out.println("Stack is NOT empty."); 
         System.out.println(queue1.toString()); 
         break; 
        case 6: end = 1; 
         System.out.println("Goodbye!"); 
         break; 
       } 
      } 
     } 
    } 

J'ai aussi fait ma propre classe Node

public class Node 
{ 
    int data; 
    Node link; 

    //contructor 
    public Node(int d) 
    { 
     data = d; 
     link = null; 
    } 

    public int getData() 
    { 
     return data; 
    } 

    public Node getLink() 
    { 
     return link; 
    } 

    public void setData(int d) 
    { 
     data = d; 
    } 

    public void setLink(Node n) 
    { 
     link = n; 
    } 
} 

Comme mentionné précédemment, le seul problème que j'ai est avec la méthode pop(), mais si vous voyez d'autres erreurs qui vont également aider, ce serait très apprécié.

Répondre

1

Remplacer

front = temp.getLink(); 

avec

front = front.getLink();