1

データ変数と次のノード変数を含むノードオブジェクトを使用して、単一リンクリストを作成しました。Customerオブジェクトはデータ変数に格納されます。customerファイルには、次のように名前変数と名前変数があります。

public customer
{
String Surname;
String Forename;
get and set methods for each;
}

リンクリストとノードクラスは、名前(AZ)の昇順で並べ替えられるため、GeorgeClooneyがJayGatsbyの前に配置されます。ObjectOutputStreamリンクリストにアイテムを再帰的に挿入するために使用される方法は問題なく、およびを使用してファイルを保存したり、およびを使用しFileOutputStreamてファイルをロードしたりする前に、多数のテストを実行しました。ObjectInputStreamFileInputStream

私が行ったすべての調査の結果、カスタムリンクリスト(標準のJavaリストではない)のシリアル化可能なインターフェイスを使用して、リンクリスト全体をオブジェクトとして保存し、シリアル化して保存する方がよいと結論付けました。ファイル。

ここで私の問題があります。ランダムな名前のノードオブジェクトを1つ追加すると、正常に機能します。アイテムが追加されるたびに、リストがファイルから逆シリアル化され、新しいSinglyLinkedListオブジェクトにロードされます。新しいノードが追加され、リストの正しい位置に配置されます。次に、この新しいリストがとでファイルに返されObjectOutputStreamますFileOutputStream

アイテムを1つ追加しましたが、問題ありません。ただし、別のものを追加すると、問題ないと表示されます(エラーはありません。適切なステートメントがすべてありますtrycatchが、実際にはリストは更新されません。printメソッドは、同じ方法でリストにアクセスし、最初のアイテムのみを印刷するため(さらに追加された場合でも)、これを強化します。リストの長さを尋ねると、最初の項目が表示されます(たとえば、1を返します)。

それを閉じて再実行すると、この同じ1ノードだけを受け取ります。次に、別のものを追加すると、それは再び機能しなくなります。

ここにいくつかの有用な情報があります:

  • 顧客ファイル、ノード、および単一リンクリストクラスには、必要なシリアル化可能なインポートがあり、シリアル化可能なヘッダーを実装します
  • 4つの個別のクラスがあります。顧客ファイル(データを含む)、ノード(顧客ファイルを含む)と次のノード(単一リンクリスト)を含み、リストを編集するためのすべてのメソッドと、すべてのスキャナーとシリアル化可能なストリームを含むメインクラスを含みますオブジェクト(例:ObjectOutputStream)およびキーボードからコマンドとデータを取得します(例: "ADD"、 "PRINT")
  • 画面上のコードカバレッジを減らすために使用されるファイルへの保存とロードには別々の方法があります-これは問題かもしれません-私はこれの初心者ですが、ここにコードがあります。

MAINMETHODにノードを追加するためのコード-再帰的ルーチンではありません

CustomerFile custDat = new CustomerFile(fName,sName); 

            Node custNode = new Node(custDat, null);
            SinglyLinkedList a = loadListFromFile();
            if (a == null)
            {
                System.out.println("Creating new list");
                SinglyLinkedList newList = new SinglyLinkedList();
                newList.addRecord(custNode, null);
                a = newList;
            }
            else
            {
                a.addRecord(a.getHead(), custNode);
            }
            saveListToFile(a);
            System.out.println("File added successfully");

そして、loadListFromFileメソッド(リストの保存メソッドは似ていますが、代わりに出力があります)には次のセットがありますfileName

private static SinglyLinkedList loadListFromFile()

{
    SinglyLinkedList lst = null;
    try
    {
        ObjectInputStream is = new ObjectInputStream(new FileInputStream(fileName));
        lst = (SinglyLinkedList) is.readObject();
        is.close();
    }
    catch(FileNotFoundException e)
    {
        e.printStackTrace();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
    catch(ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    return lst;
}
4

1 に答える 1

0

幸いなことに、私は問題を解決しました!あなたの助けに感謝しますが、問題は私の論理の失敗にありました。値を取得してノードに追加するループを実行しました。これらのノードは、NEW INSIDE THE LISTとして宣言されていたリストに追加されていました。つまり、リストはsaveListToFileメソッドに到達できなかったため、保存されているリストに追加されませんでした。ファイル

于 2012-12-17T23:28:14.140 に答える