2012-05-09 7 views
0

私はJavaでリストADTを実装しようとしています。私はGoodrichのデータ構造に関する本を続けました。私はポジションと呼ばれる2つのインターフェイスを作成リスト実装のClassCastException?

:今

public interface Position { 
    Object element()throws InvalidPositionException; 

} 

first(), last()のようなリストのメソッド宣言を持っているリストなどを、私はポジションを実装していDNode.javaと呼ばれるクラスを持っています特定のノードの前と次の要素を割り当てるメソッド。

最後に、私はListインターフェイスを実装するNodeList.javaを持っています。

これには、位置とオブジェクトを入力として受け取り、特定の位置の前にノードを挿入するためにリストを変更するメソッドがあります(insertBefore())。

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

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

基本的に、私は、文字列の形式でユーザからの入力をとって、オブジェクトを入力するためにそれを変換し、位置を入力するためにそれを変換します。 私がそうするとき、私は

java.lang.StringではListPackage.Position

にキャストすることはできませんが、誰かが適切な型キャストを行う方法を教えてくださいすることができ言いクラスキャスト例外を取得。または私のアプローチが間違っていると私は別の何かをしている必要がありますか?

私はデータ構造が初めてです。だから、どんな助けもありがとう。 ありがとうございます。

+0

DNodeクラスのコンストラクタでDNodeオブジェクトにStringを変換する方法のロジックを実装する必要があります 'br'はどのようなものです:代わりに、StringからPositionを作成する必要がありますか?これがBufferedReaderなら、明らかにStringを読み込み、Positionにキャストすることはできません。 –

答えて

2

エラーとして、StringPositionであると言いますが、そうではありません。

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

そして、あなたは

+0

私はパラメータとして文字列を取ったDNodeのコンストラクタを作成しました。しかし、私は前と次のフィールドをnull以外のものに設定することはできません(私は望みません)。私は何をすべきか? – Sathya

+1

'setNext()'/'setPrev()'メソッドを呼び出すことによって、前/次のリンクを外部的に追加する必要があります。誰が呼び出しを行っているかは別の質問です:main()から直接行うことができますが、既に 'NodeList'クラスがあるので、その' insertNode() 'メソッドを呼び出すことができます。後者の場合、インデックスまたはイテレータを使用して位置を指定することができます(Listがサポートしている場合) - 意味をなさず、あなた次第です( 'List'インタフェースに似たものがあるかどうかを参照してください) ;はいの場合、その方法を実装/使用してください) – Attila

+0

ありがとうございます。 – Sathya

3

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