リスト処理の演習

課題１

Chainクラスを作成し、次のいずれかを行うmainメソッドを記述しなさい。

public class Chain
{
Chain next;
void show()
{
System. out. println( this);
}
void showAll()
{
Chain c;
c = this;
System. out. println( "(");
while( c != null)
{
c. show();
c = c. next;
}
System. out. println( ")");
}
public static void main( String[] args)
{
Chain a, b, c;
...
}
}

1. (初級)

mainメソッド内の変数a,b,cが図のようなオブジェクトを参照しているようにした後

a.showAll();b.showAll();c.showAll();

を行って動作を確かめなさい。

ヒント

インスタンスは必要な個数(７つ) new Chain() で作成します。

2. (中級)

１と同じことを、 next.next のような記述をしないで行いなさい。

ヒント

作業用の変数が１つ必要です。

3. (上級)

１と同じことを、インスタンスを次の順で作成して行いなさい。

ヒント

作業用の変数はa,b,cの他に１つとする。

課題２

Chainクラスにメソッドを追加し動作を確かめなさい。

1. (初級)

つぎの３つのメソッドを記述し、mainメソッドにはそれらの動作確認の処理を記述しなさい。

void showContent()

void add(Chain c)

void del( )

2. (中級)

初級に次を追加。

つぎのメソッドを記述し、 mainメソッドにはそれらをつかって、リストのｎ番目を削除する処理、リストのｎ番目に追加する処理を記述しなさい。

Chain nth(int n)

3. (上級)

中級に次を追加。

つぎのメソッドを記述し、 mainメソッドには、リストの最後のオブジェクトを削除する処理、リストの最後に追加する処理を追加しなさい。

int length( )

課題３

課題２の初級まで済んでおり Chainクラスにはコンストラクタと次のメソッドが定義されているものとする。

add

del

showContent

以下の課題では、Chainクラスに修正加えないこと。

Chainクラスを継承してCardクラスを作成した後、 以下の１～３のいずれかを行いなさい。

青で囲んだ部分をつなぎ変えて逆順にする問題です。

Cardクラスは次のとおり入力し、設問に対応する処理をmainメソッド内に追加しなさい。

public class Card extends Chain
{
String suit;
int rank;
Card()
{
}
Card( String suit, int rank)
{
this. suit = suit;
this. rank = rank;
}
void show()
{
System. out. printf( "%s %d\n", suit, rank);
}
Card first()
{
return ( Card) this. next;
}
public static void main( String[] args)
{
Card a, b;
a = new Card();
b = new Card();
a. add( new Card( "ハート", 13));
a. add( new Card( "ハート", 12));
a. showContent();
// ここに追加
b. showContent();
}
}

注意

新しいインスタンスを作ったり、suitやrankに代入してはいけません。

変数aの内容が変わってもよい。

１．(初級)

mainメソッドの34行目まで行うと、次のような状態になる。

この後、インスタンスを繫ぎかえて、次の状態にする処理を書きなさい。

２．(中級)

青で囲んだ部分に３つのインスタンスがつながっているときに、 その３つを逆順につなぎかえる処理を、 メソッド呼び出しだけを用いて行いなさい。

34行目のa.showContent()で

(ハート 11ハート 12ハート 13)

と表示され、 最後のb.showContent()で

(ハート 13ハート 12ハート 11)

と表示されるようにする。

ヒント

first()

add()

del()

を使います。

３．(上級)

青で囲んだ部分につながっているインスタンスの個数がいくつであっても、 それらを逆順につなぎかえる処理を、 メソッド呼び出しだけを用いて行いなさい。