2016-12-01 3 views
3

私はJavaの実装でキューについて読んでいました。キューのデキューとエンキューのメソッドを実装

public String dequeue() { 
    if (isEmpty()) { 
     throw new RuntimeException("Queue underflow"); 
    } else if (first = last) { 
     String f = first.item; 
     first = null; 
     last = null; 
     return f; 
    } 

    String f = first.item; 
    first = first.next; 
    return f; 

} 
public void enqueue(String item) { 
    Node x = new Node(item); 
    if (first = last = null) { 
     first = last = x; 
    } 
    last.next = x; 
    last = x; 
} 

は私がデキューに右やっている()およびエンキュー()メソッド:私は、次のコード

public class QueueOfStrings { 

    private Node first = null; // least-recently added 
    private Node last = null; // most-recently added 

    private class Node { 

     private String item; 
     private Node next; 
    } 

    // is the queue empty? 
    public boolean isEmpty() { 
     return first == null; 
    } 

    public String dequeue() { 
     if (isEmpty()) { 
      throw new RuntimeException("Queue underflow"); 
     } 
     String item = first.item; 
     first = first.next; 
     return item; 
    } 

    public void enqueue(String item) { 
     Node x = new Node(); 
     x.item = item; 
     if (isEmpty()) { 
      first = x; 
      last = x; 
     } else { 
      last.next = x; 
      last = x; 
     } 
    } 

私はこのような私の方法でそれらを書き換えたのを発見しましたか? mainメソッドで

私は次のように実行する必要があります。

public static void main(String[] args) { 

    QueueOfStrings q = new QueueOfStrings(); 
    q.enqueue("roro"); 
    q.enqueue("didi"); 
    q.enqueue("lala"); 

    System.out.println(q.dequeue()); 
} 

おかげで何を意味するか

+0

「私はデキューでの書き込み()およびエンキュー()メソッドをやっていますか?」 ?また、あなたの最後のものはif(first == null && last == null){if(first = last = null)の代わりに{ – matt

+0

} null ' – Joe

+0

これはコンパイルされません。 first = last = nullで何をしようとしていますか? –

答えて

3
public String dequeue() { 
    if (isEmpty()) { 
     throw new RuntimeException("Queue underflow"); 
    } else if (first == last) { 
     String f = first.item; 
     first = null; 
     last = null; 
     return f; 
    } 

    String f = first.item; 
    first = first.next; 
    return f; 

} 
public void enqueue(String item) { 
    Node x = new Node(item); 
    if (first == null && last == null) { 
     first = x; 
     last = x; 
     return; // return back when first node is enqueued 
    } 
    last.next = x; 
    last = x; 
} 
+0

@Joeキューが空でアイテムをエンキューすると、 'enqueue()'メソッドの 'if'ステートメントに直接入ります。 'return'文を置かないと、コードは' if'文の外側の行を引き続き実行します。 「返品」とは、「アイテムが等しくなり、ここでメソッドを終了し、メソッドがどこから呼び出されたかを返す」ことを意味します。 – rafid059

+1

Rafiduzzaman Sonnetしかし、返品を取り除いたとき、コードは最初と最後であってもうまくいきましたnull ,, thanks – Joe

+0

@Joeは 'return'ステートメントを削除しても動作しますが、それは読みやすくなります。また、return文を削除すると、最初の項目をエンキューするときにメソッドの終わりまでに自身をポイントします(2番目の項目をエンキューするときに固定されますが、望ましくない動作です)。だから、申し訳ありませんよりも安全です – rafid059

関連する問題