サイズ: 3196
コメント:
|
サイズ: 3715
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 82: | 行 82: |
. | . cが指したい場所は、1の段階でのc.nextが指しているのでこのように書けます。 {{{ c = c.next; }}} . この後、1と同様に c.show()を行えばよい。 3. 次のインスタンスの処理。 . したがって、次のインスタンスの処理はこのように書けます。 {{{ c = c.next; c.show(); }}} . インスタンスがつながっているときは(個数にかかわらず)この処理でよい。 4. いちばん後ろのインスタンスの処理。 . {{attachment:chain9.png}} |
行 91: | 行 105: |
. {{attachment:chain9.png}} |
つながったオブジェクトを表示する
オブジェクトの操作を行うまえに、表示のためのメソッドを作っておきます。
1つのオブジェクトを表示する
オブジェクトのアドレス(と種類)を表示するには、 オブジェクトを指している変数の値をprintすればよい。
ここで
System.out.println(a);
の代わりに
a.show();
と書けるようにするには、つぎのようなshowメソッドを定義すればよい。
void show() { System.out.println(this); }
どこも参照していないときの値
Chainクラスのインスタンスはこのような形をしています。
変数nextがどこも参照していないときは、どんな値をとればよいのでしょうか。
この値は
- null
と決められており、オブジェクト型の変数が作られたときは、 nullで自動的に初期化されます。
次のようなプログラムを実行して確かめることができます。
実行すると
null
と表示されます。
つながったオブジェクトを表示する
showAllという名前のメソッドを作成します。
変数aがChainインスタンスを指しており、 そのインスタンスの変数nextがまた別のChainインスタンスを指しているような場合に
a.showAll();
とすることで、つながっているChainインスタンスをすべて表示するものです。
- Chainインスタンスがつながっている個数は決まっていません。
- 一番後ろのChainインスタンスの変数nextの値はnullになっています。
showAllメソッド内での処理を考える
いくつものインスタンスを表示するためには、 変数を使ってインスタンスをたどっていく必要があります。
- このために 変数 c を使うことにします。
1. cが先頭のインスタンスを指している場合です。
- このインスタンスを表示するには、先に作成した1つのオブジェクトを表示するメソッドshow()を使えばよい。
c.show();
2. 2番目のインスタンスの処理。
- まず、変数 c が2番目のインスタンスを指すように修正しなければなりません。
- cが指したい場所は、1の段階でのc.nextが指しているのでこのように書けます。
c = c.next;
- この後、1と同様に c.show()を行えばよい。
3. 次のインスタンスの処理。
- したがって、次のインスタンスの処理はこのように書けます。
c = c.next; c.show();
- インスタンスがつながっているときは(個数にかかわらず)この処理でよい。
4. いちばん後ろのインスタンスの処理。
変数aが次のようなオブジェクトを参照しているときに
- a.showAll()
が呼ばれた場合の動作を考えます。
メソッドが呼ばれると、呼び出し元の変数の値がthisに渡されます。
- ここではaの値がthisに渡されるのでthisはaが指していたのとおなじオブジェクトを指します。
先に作成した1つのオブジェクトを表示するメソッドshow()