如何将链表打印到文件中

How to print a linked list into a file

每个链接列表都有一个 ISBN、作者姓名、图书日期、图书价格,我正在尝试将整个图书目录(x 多本书)保存为一个文件。他们说

有错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 21
at BookCatalog.SaveFile(BookCatalog.java:34)
at BookCatalogClient.menu(BookCatalogClient.java:167)
at BookCatalogClient.main(BookCatalogClient.java:25)

which java:167 = for(Book newBook: g.SaveFile())

代码如下:

来自 class 1:

PrintStream out = new PrintStream(new FileOutputStream("books.txt"));
for(Book newBook: g.SaveFile()){
out.println(newBook.getBookISBN()+"\t"+newBook.getLastName()+"\t"
+newBook.getFirstName()+"\t"+newBook.getTitle()+"\t"+newBook.getYearOfPublication()+"\t"+newBook.getPrice());

}

来自 class 2:

count 是一个全局变量,用于保存目录中的书籍数量。

public Book[] SaveFile(){

   Book cursor = head;
   Book[] bookCount = new Book[count-1];
   int i = 0;
   while(cursor!=null){
       Book out = cursor;
       cursor = cursor.getNext();
       bookCount[i] = out;
       i++;

   }
   return bookCount;

}

线程异常 "main" java.lang.ArrayIndexOutOfBoundsException: 21

此异常仅在您超出数组范围时显示。 所以对于 while 循环你想做这样的事情

while (cursor < counter)//Or something
......

这有意义吗?

class2 中的 count 变量有问题。你是如何初始化它的?出现异常是因为您的数组大小为 20,并且您要在索引 21

处插入 Book

您的代码不完整我无法弄清楚您的代码中的 head 是什么。什么

  cursor = cursor.getNext();
   bookCount[i] = out;

游标如何最终变成 null 你的 while 循环是 运行 无限。请检查
你必须小心

Book[] bookCount = new Book[count-1]; 

这里数组的大小也起到了检查的作用

尝试将 book[] 更改为 ArrayList<Book> i,e change declaration

Book[] bookCount = new Book[count-1]; 

ArrayList<Book> bookCount = new ArrayList<Book>(); 并将代码 bookCount[i]=cursor 更改为 bookCount.add(cursor)

并尝试

否则改变

 Book[] bookCount = new Book[count]; 

并检查