リスト処理の演習
課題1
Chainクラスを作成し、次のいずれかを行うmainメソッドを記述しなさい。
1 public class Chain 2 { 3 Chain next; 4 5 void show() 6 { 7 System.out.println(this); 8 } 9 10 void showAll() 11 { 12 Chain c; 13 14 c = this; 15 System.out.println("("); 16 while(c != null) 17 { 18 c.show(); 19 c = c.next; 20 } 21 System.out.println(")"); 22 } 23 24 public static void main(String[] args) 25 { 26 Chain a, b, c; 27 ... 28 } 29 }
1. (初級)
mainメソッド内の変数a,b,cが図のようなオブジェクトを参照しているようにした後
a.showAll(); b.showAll(); c.showAll();
を行って動作を確かめなさい。
ヒント
- インスタンスは必要な個数(7つ) new Chain() で作成します。
2. (中級)
1と同じことを、 next.next のような記述をしないで行いなさい。
ヒント
- 作業用の変数が1つ必要です。
3. (上級)
1と同じことを、インスタンスを次の順で作成して行いなさい。
ヒント
- 作業用の変数はa,b,cの他に1つとする。
課題2
Chainクラスにメソッドを追加し動作を確かめなさい。
1. (初級)
つぎの3つのメソッドを記述し、mainメソッドにはそれらの動作確認の処理を記述しなさい。
- void showContent()
- void add(Chain c)
- void del( )
2. (中級)
初級に次を追加。
つぎのメソッドを記述し、 mainメソッドにはそれらをつかって、リストのn番目を削除する処理、リストのn番目に追加する処理を記述しなさい。
- Chain nth(int n)
3. (上級)
中級に次を追加。
つぎのメソッドを記述し、 mainメソッドには、リストの最後のオブジェクトを削除する処理、リストの最後に追加する処理を追加しなさい。
- int length( )
課題3
課題2の初級まで済んでおり Chainクラスにはコンストラクタと次のメソッドが定義されているものとする。
- add
- del
- showContent
以下の課題では、Chainクラスに修正加えないこと。
Chainクラスを継承してCardクラスを作成した後、 以下の1~3のいずれかを行いなさい。
- 青で囲んだ部分をつなぎ変えて逆順にする問題です。
Cardクラスは次のとおり入力し、設問に対応する処理をmainメソッド内に追加しなさい。
1 public class Card extends Chain 2 { 3 String suit; 4 int rank; 5 6 Card() 7 { 8 } 9 10 Card(String suit, int rank) 11 { 12 this.suit = suit; 13 this.rank = rank; 14 } 15 16 void show() 17 { 18 System.out.printf("%s %d\n", suit, rank); 19 } 20 21 Card first() 22 { 23 return (Card)this.next; 24 } 25 26 public static void main(String[] args) 27 { 28 Card a, b; 29 a = new Card(); 30 b = new Card(); 31 32 a.add(new Card("ハート", 13)); 33 a.add(new Card("ハート", 12)); 34 a.showContent(); 35 36 // ここに追加 37 38 b.showContent(); 39 } 40 }
注意
- 新しいインスタンスを作ったり、suitやrankに代入してはいけません。
- 変数aの内容が変わってもよい。
1.(初級)
mainメソッドの34行目まで行うと、次のような状態になる。
この後、インスタンスを繫ぎかえて、次の状態にする処理を書きなさい。
2.(中級)
青で囲んだ部分に3つのインスタンスがつながっているときに、 その3つを逆順につなぎかえる処理を、 メソッド呼び出しだけを用いて行いなさい。
34行目のa.showContent()で
( ハート 11 ハート 12 ハート 13 )
と表示され、 最後のb.showContent()で
( ハート 13 ハート 12 ハート 11 )
と表示されるようにする。
ヒント
- first()
- add()
- del()
を使います。
3.(上級)
青で囲んだ部分につながっているインスタンスの個数がいくつであっても、 それらを逆順につなぎかえる処理を、 メソッド呼び出しだけを用いて行いなさい。