2017-01-03 5 views
1

私はLinkedlistを使ってキュー構造を書いています。そして、キューに要素を追加する方法を書いています。問題はメソッドがvoid enqueueCharacter(char ch)の署名を持つべきであることを指定しているので、signiture void enqCharacter(queueNode q、char ch)で別のメソッドを書き、このメソッドをenqueueCharacterの内部で呼び出しました。この2つの方法でメソッド内のLinkedListの値を更新する違いは何ですか?

最初は失敗しましたが、私には何の手がかりもありません。試してみるとちょっとした変更が加えられました。しかし、実際には私は彼らがまったく同じ概念を持っているので(どちらも思うが)、どちらもうまく動作するか両方が失敗するべきだと思う。ここで

はqueueNodeの定義です:

class queueNode 
{ 
    char head; 
    queueNode tail; 
    queueNode(char c) 
    { 
     head = c; 
     tail = null; 
    } 
} 

とキューの宣言:

queueNode queue = null; 

これは私が最初にキューを更新するために書いたものです:

public void enqCharacter(queueNode q, char ch) 
{ 
    if(q == null) q = new queueNode(ch); 
    else enqCharacter(q.tail, ch); 
} 

public void enqueueCharacter(char ch) 
{ 
    enqCharacter(queue, ch); 
} 

概念は、enqueueCharacter(char ch)を呼び出すとすぐにenqCharacter(queue、ch)を呼び出すことです。 se。 enqCharacter(queueNode q、char ch)では、qがヌルかどうかをチェックし、そうであれば最初の要素をqに追加し、それ以外の場合はq.tailに追加します。しかし、私はチェックして、キューの値を決して変更したことがないことが判明しましたが、メソッドにキューを渡してから(キューを渡してみましたが、まだ動作していませんでした)。

は、その後、私は少しそれを変更:

public void enqCharacter(queueNode q, char ch) 
{ 
    if(q.tail == null) q.tail = new queueNode(ch); 
    else enqCharacter(q.tail, ch); 
} 

public void enqueueCharacter(char ch) 
{ 
    if(queue == null) queue = new queueNode(ch); 
    else enqCharacter(queue, ch); 
} 

を私は他のアイデアを持っていないという理由だけで、私はこれが優れていると思うが、それは働いていないため、これらの変更を行いました。そして、私はまだなぜか分からない。

誰かがキューの代わりにテールを更新する必要がある理由を説明できる人はいますか?どうもありがとうございました!

答えて

2

Javaは「値渡し」です。

メソッドにパラメータとしてq.tailを送信すると、値を送信します。参照型であるため、値はこの参照(q.tail)が参照するオブジェクトの場所になります。

したがって、q.tailがnullの場合、メソッドとしてenqCharacterにnull値(null参照)を送信してから、このnull参照に新しいqueueNodeオブジェクトを割り当てます。

しかし、2番目のケースでは、いずれの場合でもenqCharacterにパラメータとしてヌル参照を送信しないため、そのチェーンへの参照があるため、チェーンを第2のケースで保持することができます。最初に、パラメータとしてnullを送信した後、新しいqueueNodeオブジェクトを割り当てると、refereneceが失われました。

+0

ありがとうございます。しかし、nullの場合でもキューの参照を送信したい場合、どうしたらよいですか? &キューを使用しますか? – sy19890515

+0

あなたの状況では、チェーンを考えてみましょう:AがBの友人であり、BがCのものであり、Cが誰の友だちでもないと仮定したとき、今度は誰かをCとして友人として添付したいので、方法とパラメータがnobody(null)の場合、新しいブランドの人がこのDに誰かにDという名前のメソッドを割り当てましたが、DメソッドをCに追加する方法はありません。それゆえ、Dは誰にも付けられずに宇宙のどこかに浮かんでいます。 また、javaでは&queueを使用できません。 – vvtx

+0

説明ありがとう! – sy19890515

関連する問題