gpt4 book ai didi

java - 无法添加到已反序列化的自定义链接列表

转载 作者:行者123 更新时间:2023-12-01 04:57:28 26 4
gpt4 key购买 nike

我创建了一个包含节点对象的单链表,其中包含数据变量和下一个节点变量。客户对象存储在数据变量中,客户文件有一个姓氏变量和一个名字变量,如下所示:

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

链接列表和节点类将按姓氏 (A-Z) 升序排序,以便乔治·克鲁尼 (George Clooney) 位于杰伊· Gatsby (Jay Gatsby) 之前。用于递归地在链接列表中插入项目的方法很好,在尝试使用 ObjectOutputStreamFileOutputStream 保存文件或使用加载文件之前,我已经运行了大量测试ObjectInputStreamFileInputStream

根据我所做的所有研究,我得出的结论是,最好使用我的自定义链表(不是标准的)上的可序列化接口(interface)将整个链表保存为一个对象Java list)将其序列化并将其保存到文件中。

现在,我的问题是:我添加了 1 个带有随机姓氏的 Node 对象,它工作正常:每次添加该项目时,列表都会从文件中反序列化并加载到新的 SinglyLinkedList 对象中。新节点被添加并放置在列表中的正确位置,然后这个新列表通过 ObjectOutputStreamFileOutputStream 传递回文件。

我添加一项就可以了;但是,如果我添加另一个,它没问题(没有错误 - 我有所有适当的 trycatch 语句),但是它实际上并没有更新列表。 print 方法强化了这一点,因为它也以相同的方式访问列表,并且仅打印第一个项目(即使添加了更多项目)。当我询问列表的长度时,它只给出第一项(例如返回 1)。

如果我关闭它并重新运行它,我将再次收到相同的 1 个节点,仅此而已。然后,如果我再添加一个,它就不再起作用了。

以下是一些有用的信息:

  • 客户文件、节点和单链表类具有必要的可序列化导入并实现可序列化 header
  • 有 4 个独立的类,客户文件 - 包含数据,节点 - 包含客户文件和下一个节点,单向链接列表 - 包含编辑列表的所有方法,以及包含所有扫描仪的主类和可序列化流对象(例如 ObjectOutputStream)并从键盘获取命令和数据(例如“ADD”、“PRINT”)
  • 有单独的方法用于保存和加载文件,用于减少屏幕上的代码覆盖率 - 这可能是问题 - 我是这方面的新手,但这是代码。

在 MAIN METHOD 中添加节点的代码 - 非递归例程

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;
}

最佳答案

幸运的是,我已经解决了这个问题!感谢您的帮助,但问题在于我的逻辑失败。我运行一个循环,获取值并将它们添加到节点中,这些节点被添加到在列表中声明为 NEW 的列表中 - 即列表无法到达 saveListToFile 方法,因此不会添加到保存在中的列表中文件

关于java - 无法添加到已反序列化的自定义链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com