0

Java でリスト ADT を実装しようとしています。Goodrich の Data Structures に関する本を読みました。

Position と呼ばれる 2 つのインターフェイスを作成しました。

public interface Position {
    Object element()throws InvalidPositionException;

}

などのリストのメソッド宣言を持つリストfirst(), last()

現在、Position を実装し、特定のノードの前後の要素を割り当てるメソッドを持つ DNode.java というクラスがあります。

そして最後に、List インターフェイスを実装する NodeList.java があります。

これには、insertBefore()Position と Object を入力として取り、リストを変更して特定の位置の前にノードを挿入するメソッドがあります。

さて、このメソッドはメインクラスである ListMain クラスから呼び出されます。

    Object p = (Object) br.readLine();
    nl.insertAfter((Position)p, element);
    nl.display();

基本的に、ユーザーからの入力を文字列の形式で取得し、それを Object 型に変換してから、Position 型に変換しました。そうすると、クラスキャスト例外が発生します

java.lang.String は ListPackage.Position にキャストできません

誰かが適切な型キャストを行う方法を教えてください。または、私のアプローチが間違っているので、何か他のことをする必要がありますか?

私はデータ構造が初めてです。そのため、どんな助けでも大歓迎です。事前にどうもありがとうございました。

4

2 に答える 2

3

すべての場合において、オブジェクトを他の型に任意にキャストすることはできません。Positionユーザーがパラメーターとして提供する文字列値を取るコンストラクターを作成することを検討してください。

于 2012-05-09T19:56:14.003 に答える
2

Stringエラーが示すように、 aは aであると言おうとしていますが、Positionそうではありません。Position代わりに、からを作成する必要がありますString

String s = br.readLine();
Position p = new DNode(s);

そして、クラスのコンストラクターでStringa をDNodeオブジェクトに変換する方法のロジックを実装する必要がありますDNode

于 2012-05-09T19:58:25.047 に答える