Java使用LinkedList和Deque接口打印队列中的所有内容

时间:2017-03-28 14:08:27

标签: java linked-list

我有点卡在这里,我需要你的帮助,这是我的代码:

import java.util.*;
import java.util.Iterator;





class Customer {
       public String lastName;
       public String firstName;
       public Customer() {
       }
       public Customer(String last, String first) {
          this.lastName = last;
          this.firstName = first;
       }
       public String toString() {
          return firstName + " " + lastName;
       }
    }
    class HourlyCustomer extends Customer {
       public double hourlyRate;
       public HourlyCustomer(String last, String first) {
          super(last, first);
       }
    }

class GenQueue<E> {
   private LinkedList<E> list = new LinkedList<E>();
   public ListIterator<E> iterator = list.listIterator();
   public void enqueue(E item) {
      list.addLast(item);
   }
   public E dequeue() {
      return list.poll();
   }
   public E show(){
       return list.peek();
   }
   public void printQueueElements(){

   }
   public E isNotEnd(){
       return list.getLast();
   }
   public boolean hasItems() {
      return !list.isEmpty();
   }
   public boolean isEmpty()
   {
       return list.isEmpty();
   }
   public Iterator<E>   iterator()
   {
    return iterator;       
   }


   public E removeFirst(){
       return list.removeFirst();
   }
   public E getFirst(){
       return list.getFirst();
   }
   public int size() {
      return list.size();
   }

   public boolean hasNext()
   {
    return false;

   }



   public void addItems(GenQueue<? extends E> q) {

      while (q.hasNext()) list.addLast(q.dequeue());
   }


}





public class Jerald {

    public static void main(String[] args){



        Scanner sc = new Scanner(System.in);
        String input1;
        String input2;
        int choice = 1000;




        GenQueue<Customer> empList;
        empList = new GenQueue<Customer>();
        GenQueue<HourlyCustomer> hList;
        hList = new GenQueue<HourlyCustomer>(); 


        while(true){

        do{

            System.out.println("================");
            System.out.println("Queue Operations Menu");
            System.out.println("================");
            System.out.println("1,Enquene");
            System.out.println("2,Dequeue");
            System.out.println("0, Quit\n");
            System.out.println("Enter Choice:");
            try{

                choice = sc.nextInt();



                switch(choice){
                case 1:

                    do{


                    System.out.println("\nPlease enter last name:  ");
                    input1 = sc.next();
                    System.out.println("\nPlease enter first name:  ");
                    input2 = sc.next();
                    hList.enqueue(new HourlyCustomer(input1, input2));
                    empList.addItems(hList);

                    System.out.println("\n"+(input2 + " " +  input1) + " is successful queued");

                    System.out.println("\nDo you still want to enqueue?<1> or do you want to view all in queue?<0> or \nBack to main menu for dequeueing?<menu>: ");
                    choice = sc.nextInt();

                    }while (choice != 0);



                     System.out.println("\nThe customers' names are: \n");

                     int numberOfElements = empList.size();




                     for (int i = 0; i < numberOfElements; i++) {
                       Customer emp = empList.dequeue();
                       System.out.println(emp.firstName + " " + emp.lastName + "\n");
                       empList.enqueue(emp);
                     }

                     break;






                case 2:


                    if (empList.isEmpty()) {
                        System.out.println("The queue is empty!");
                    }
                    else
                    {
                    System.out.println("\nDequeued customer: "  +empList.getFirst());
                    empList.removeFirst();
                    }

                    if (empList.isEmpty()) {
                        System.out.println("The queue is empty!");
                    }
                    else
                    {
                    System.out.println("\nNext customer in queue: "  +empList.getFirst()+"\n");
                }

                    break;

                case 0:

                    System.exit(0);



                default:
                        System.out.println("Invalid choice");
                }

            }

            catch(InputMismatchException e){
                System.out.println("Please enter 1-5, 0 to quit");
                sc.nextLine();
            }

        }while(choice != 0);
        }
    }
}

查看CASE 1,在循环中尝试打印已保存在队列中的所有内容。我没有看到任何错误,但是当我运行它时,在获得用户输入,结束do-while循环后,它不会在Queue内部打印出来。这是我的方法的问题吗?在Deque方法中,我测试了poll() element() and peek() bu也没有帮助。无论如何,我被困在这里,无法前进,我不知道问题究竟在哪里,我重读并重新阅读我的代码,我认为它足够流畅。但是你对此有何看法?我该怎么办呢?我尝试了一切可以修复错误但没有运气后问了这个问题。请分享您的想法和解决方法。

我认为是第155行中的for循环,在情况1中,它给出了错误的输出。你的想法?

顺便说一句,我在案例2中所做的是Dequeueing,

1 个答案:

答案 0 :(得分:0)

问题是当你调用addItems方法时:

 empList.addItems(hList);

我不知道为什么hasNext使用的addItems方法总是返回false?这没有意义,你需要修改它里面的逻辑。由于它是假的,所以你的代码在while循环中永远不会被调用。

public void addItems(GenQueue<? extends E> q) {
      while (q.hasNext()) list.addLast(q.dequeue());
}