2013-07-09 51 views
2

我在java中做隊列。這裏是我的代碼:Java中的Enqueue,Dequeue和ViewQueue

public class ListQueue { 
public static void main(String[] args){ 
    Queue myQueue; 
    Scanner sc = new Scanner(System.in); 
    String input; 
    int choice = 99; 
    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("3,Empty?"); 
     System.out.println("4,Count?"); 
     System.out.println("5,View Queue"); 
     System.out.println("0, Quit\n"); 
     System.out.println("Enter Choice:"); 
     try{ 
      choice = sc.nextInt(); 
      switch(choice){ 
      case 1: 
       System.out.println("Please enter name: "); 
       input = sc.next(); 
       myQueue.enqueue(input); 
       System.out.println(input + "is successful queued"); 
       break; 
      case 2: 
       if(myQueue.isEmpty()){ 

       } 
       break; 
      case 3: 
       if(myQueue.isEmpty()){ 
        System.out.println("Queue is empty"); 
       }else{ 
        System.out.println("Queue is not empty"); 
       } 
       break; 
      case 4: 
       System.out.println("Number of people is " + "the queue" + myQueue.size()); 
       break; 
      case 5: 
       if(!myQueue.isEmpty()) 
        myQueue.viewQueue(); 
       else 
        System.out.println("Queue is empty"); 
       break; 
      case 0: 
       System.out.println("Good-bye"); 
       break; 
      default: 
        System.out.println("Invalid choice"); 
      } 
     } 
     catch(InputMismatchException e){ 
      System.out.println("Please enter 1-5, 0 to quit"); 
      sc.nextLine(); 
     } 
    }while(choice != 0); 
} 

}

不過,我在排隊()和viewQueue(),我不知道爲什麼有錯誤。我是否以錯誤的方式宣佈隊列?提前致謝。我是新來的隊伍,請耐心等待。

回答

4

Java的隊列沒有入隊和出隊的方法,這些操作是使用以下方法進行:

入列:

  • ​​:如果未能插入對象則拋出異常
  • offer(e):如果無法插入對象返回false

調度:

  • remove():拋出異常,如果隊列爲空
  • poll()返回NULL如果隊列爲空

看看隊列中的第一個對象:

  • element():拋出異常,如果隊列爲空
  • peek():如果隊列爲空

add方法,其中隊列自Collection繼承,插入一個 元件,除非它會違反返回null隊列的容量限制,在 這種情況下拋出IllegalStateException。提供方法 專門用於有界隊列,與僅在 中添加的方法不同,它表示無法通過返回false來插入元素。

(參見:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html

您還可以檢查這個,因爲這是比較有用的:

http://docs.oracle.com/cd/B10500_01/appdev.920/a96587/apexampl.htm

+0

順便說一句,如何循環通過隊列內的元素?你能舉一些例子嗎? –

0

就像zerocool說你是不是初始化隊列,如隊列是一個接口並且你不能直接實例化一個接口,你需要實例化一個實現了接口Queue的類,如ArrayDequeue,LinkedList等......

初始化隊列,擺脫錯誤的,你需要的是這樣的:

Queue<Integer> myQueue = new ArrayDeque<Integer>(); 

Queue<String> myQueue = new LinkedList<String>(); 

Here's the API for the type of Queues you can instantiate

Also see

0

@By怎麼做的方式我通過隊列中的元素循環?你可以給我舉一些例子 -

我剛剛添加了功能在你的情況5:這是查看列表元素。

case 5: 
    if(!myQueue.isEmpty()) 
    { 
    for(Iterator it=myQueue.iterator();it.hasNext();) 
     System.out.println(it.next()); 
//or using as a Object in Enhanced for loop 
     //for (Object element : myQueue) 
     //System.out.println(element); 
    } 
    else 
     System.out.println("Queue is empty"); 
    break; 

而且Ryman Holmes建議你可以使用ArayDeque。

Queue<String> myQueue = new ArrayDeque<String>(); 

優點: - 它比堆棧和LinkedList 更快 - ArrayDeque沒有容量限制,使他們可以根據需要增加以支持使用。

風險: - 它們不是線程安全的;在沒有外部同步的情況下。 - 它們不支持多線程的併發訪問。

相關問題