サイズ: 1424
コメント:
|
サイズ: 3750
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 53: | 行 53: |
showAllという名前のメソッドを作成します。 変数aがChainインスタンスを指しており、 そのインスタンスの変数nextがまた別のChainインスタンスを指しているような場合に {{{ a.showAll(); }}} とすることで、つながっているChainインスタンスをすべて表示するものです。 * Chainインスタンスがつながっている個数は決まっていません。 * 一番後ろのChainインスタンスの変数nextの値はnullになっています。 ---- === showAllメソッド内での処理を考える === いくつものインスタンスを表示するためには、 変数を使ってインスタンスをたどっていく必要があります。 . このために 変数 c を使うことにします。 1. 先頭のインスタンスを表示。 . cが先頭のインスタンスを指している場合です。 . {{attachment:chain7.png}} . cが指しているインスタンスを表示するには、1つのオブジェクトを表示するメソッドshow()を使えばよい。 {{{ c.show(); }}} 2. 2番目のインスタンスに移る。 . 先頭のインスタンスの処理(表示)が終わったら、c が次のインスタンスを指すように修正します。 . 上の図から次の図になるようにcの値を修正します。 . {{attachment:chain8.png}} . c.nextが指していたものを、cが指すようにすればよいので次のように書けます。 {{{ c = c.next; }}} 3. 繰り返しの内容。 . したがってインスタンスがつながっているときは、1,2の処理を繰り返して行えばよいと考えられる。 {{{ while (条件) { c.show(); c = c.next; } }}} 4. いちばん後ろのインスタンスの処理。 . {{attachment:chain9.png}} ---- 変数aが次のようなオブジェクトを参照しているときに . a.showAll() が呼ばれた場合の動作を考えます。 |
|
行 54: | 行 105: |
メソッドが呼ばれると、呼び出し元の変数の値がthisに渡されます。 . ここではaの値がthisに渡されるのでthisはaが指していたのとおなじオブジェクトを指します。 先に作成した1つのオブジェクトを表示するメソッドshow() |
つながったオブジェクトを表示する
オブジェクトの操作を行うまえに、表示のためのメソッドを作っておきます。
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が先頭のインスタンスを指している場合です。
- cが指しているインスタンスを表示するには、1つのオブジェクトを表示するメソッドshow()を使えばよい。
c.show();
2. 2番目のインスタンスに移る。
- 先頭のインスタンスの処理(表示)が終わったら、c が次のインスタンスを指すように修正します。
- 上の図から次の図になるようにcの値を修正します。
- c.nextが指していたものを、cが指すようにすればよいので次のように書けます。
c = c.next;
3. 繰り返しの内容。
- したがってインスタンスがつながっているときは、1,2の処理を繰り返して行えばよいと考えられる。
while (条件) { c.show(); c = c.next; }
4. いちばん後ろのインスタンスの処理。
変数aが次のようなオブジェクトを参照しているときに
- a.showAll()
が呼ばれた場合の動作を考えます。
メソッドが呼ばれると、呼び出し元の変数の値がthisに渡されます。
- ここではaの値がthisに渡されるのでthisはaが指していたのとおなじオブジェクトを指します。
先に作成した1つのオブジェクトを表示するメソッドshow()