welcome: please sign in
location: "オブジェクトをつなぐメソッド"の差分
8と9のリビジョン間の差分
2010-11-22 07:24:45時点のリビジョン8
サイズ: 2123
編集者: masahiko
コメント:
2010-11-24 00:58:06時点のリビジョン9
サイズ: 2112
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
#acl All:

オブジェクトをつなぐメソッド

オブジェクトを沢山つなげることができました。

うまい方法を使うと、新しいオブジェクトを先頭に追加する方が楽にできます。


例1

変数aが、いくつかつながったオブジェクトを参照しており、 変数tempが1つのオブジェクトを参照している場合です。

  • chain30.png

赤矢印でしめしたようにつなぎ変えることで、1つのオブジェクトを追加できます。

  • chain31.png

  • chain32.png

この処理はこのように書けます。

  • temp.next = a;
    a = temp;


例2

赤矢印でしめした位置に追加する場合。

  • chain33.png

追加したい位置の直前にあるオブジェクトを参照できなければなりません。

変数pがその位置を指しているとします。

  • chain34.png

pが指しているオブジェクトの直後に、 tempが示している1つのオブジェクトを追加する処理はこのように書けます。

  • temp.next = p.next;
    p.next = temp;


例3

例2の処理はchainが沢山つながった途中をpが指している場合でも正しく動作します。

  • chain35.png


オブジェクトをつなぐメソッド

例2、例3と同じ処理をするメソッドを作ります。

このような形で呼び出されるものとします。

  •    1 public static void main(String[] args)
       2 {
       3         Chain a;
       4         ...
       5         a.add(new Chain());
       6         ...
       7 }
    

Chain型の引数を1つとるので、メソッドはこのような形になります。

  •    1 void add(Chain c)
       2 {
       3 }
    

mainメソッドから上のように呼び出された場合は

  • aの値がthisに
  • 引数の値がcに

対応付けられて本体が実行されるので、図に示すような処理を記述すればよい。

  • chain36.png

  • chain37.png

オブジェクトをつなぐメソッド (最終更新日時 2010-11-24 00:58:06 更新者 masahiko)