2016-03-24 1 views
0

私のQueueクラスに問題があります。キューは配列に基づいています。キュー項目が配列の最後に到達すると、配列の先頭に追加する必要があります。キューがいっぱいになると、最も古いキューアイテムを削除して表示する必要があります。 8番目の要素が挿入されたときに削除された最も古い項目を表示するのに問題があります。キューのような配列を使用する

ユーザーが最初の3人の顧客の名前を表示するように選択すると、コードを1つずつキューから削除して(先入れ先出し)コードを削除して表示する必要があります。

例入出力:

キュー入力される: B C D E F G H

キュー出力される。 H B C D e f g
除去 項目は以下のとおりであった:H

予想出力は次のようになります

H除去 F G 項目があった B C D E:


は、それが挿入され、最後に移動アレイの前面にあるアイテムですが、「削除されたアイテムはどのように表示されましたか:」「 コードは:

public class MyQueue { 

    private final static int CAPACITY = 7; 
    static String qitems[] = new String[CAPACITY]; 
    private static int front = 0, end = 0, count=0; 

    public void addqueue(String name) { 
     qitems[end] = name; 
     count++; 
     if(count==7) { 
      takequeue(); 
      System.out.println("Queue is full"); 
     } 
     end = (end + 1) % 7; 
    } 

    public void takequeue() { 
     System.out.println("Item removed:"+qitems[front]); 
     front = (front +1) % 7; 
    } 

    public void displayNames() { 
     System.out.println(" 3 names entered are: "); 
     for (int x = 0; x < 3; x++) { 
      System.out.println(qitems[x]); 
     } 
    } 
} 
+0

あなたのコードは私のために正常に動作するようです。 – thecardkid

+0

問題は削除されたアイテムが削除されたことを示していないことです。削除されたアイテムが表示されています:h – tomaszsvd

+0

8個の名前が追加された後に何が起こりますか?それは決して再び7に等しくなりません。 – KevinO

答えて

1


public class QWithArray { 

    String[] qItems; 
    int front; 
    int end; 
    int current; 

    QWithArray(int CAPACITY) { 
     qItems = new String[CAPACITY]; 
     current = 0; 
     front = -1; 
     end = -1; 
    } 

    public void addqueue(String element) { 
     if (current == qItems.length) { 
      System.out.println("Item removed was: " + qItems[(front + 1) % qItems.length]); 
     } 

     front = (front + 1) % qItems.length; 
     qItems[front] = element; 
     current++; 

     if (end == -1) { 
      end = front; 
     } 
    } 

    public String takequeue() { 
     if (current == 0) { 
      System.out.println("Queue is empty; can't remove."); 
      return null; 
     } 

     String result = qItems[end]; 
     qItems[end] = null; 

     end = (end + 1) % qItems.length; 
     current--; 

     if (current == 0) { 
      front = -1; 
      end = -1; 
     } 
     return result; 
    } 

    public static void main(String[] args) { 
     QWithArray q = new QWithArray(7); 
     q.addqueue("a"); 
     q.addqueue("b"); 
     q.addqueue("c"); 
     q.addqueue("d"); 
     q.addqueue("e"); 
     q.addqueue("f"); 
     q.addqueue("g"); 
     System.out.println(Arrays.toString(q.qItems)); 

     q.addqueue("h"); 
     System.out.println(Arrays.toString(q.qItems)); 
    } 
} 

と等しい場合、単純な修正がチェックした後countをインクリメントすることで、出力は次のようになります。


[a, b, c, d, e, f, g] 

Item removed was: a 

[h, b, c, d, e, f, g] 


0

次のメインを追加してコードを実行しました。それは "アイテムが削除された:a"という印刷を行います。あなたの「メイン」に貼り付けて、あなたが何をしているかを見ることができます。

public static void main(String [] args) {    
     MyQueue q = new MyQueue(); 
     q.addqueue("a"); 
     q.addqueue("b"); 
     q.addqueue("c"); 
     q.addqueue("d"); 
     q.addqueue("e"); 
     q.addqueue("f"); 
     q.addqueue("g"); 
     q.addqueue("h"); 
    } 

enter image description here

+0

7番目のアイテムが追加されると、「アイテムが削除された: " " 8番目のアイテムがキューに追加されて表示され、アイテム8がトップにプッシュされるときに出力が削除されます.3つの名前が表示された時点で、出力は次のようになります。 "3入力された名前は、 " " a b c " – tomaszsvd

0

あなたaddQueue方法における問題は、あなたがそれがゼロに等しいかどうかをチェックする前に、カウントをincremementingされていることです。したがって、条件count == 7は、7番目の項目を追加した後にtrueに評価され、takeQueueメソッドがアクティブになります。 "アイテムが削除されました:"が印刷されます。それは7

public void addqueue(String name) 
{ 
     if(count>=7) 
     { 
      takequeue(); 
      System.out.println("Queue is full"); 
     } 
     qitems[end] = name; 
     count++; 
     end = (end + 1) % 7; 
} 
関連する問題