每个链接列表都有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)
其中java:167 = for(Book newBook:g.SaveFile())
以下是代码:
来自第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());
}
来自第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;
}
答案 0 :(得分:1)
您的代码不完整我无法弄清楚代码中的 cursor = cursor.getNext();
bookCount[i] = out;
。什么
Book[] bookCount = new Book[count-1];
游标如何变为null,最终你的while循环无限运行。请检查
你必须小心
ArrayList<Book>
这里数组的大小也在扮演角色检查
尝试将book []更改为Book[] bookCount = new Book[count-1];
i,更改声明
ArrayList<Book> bookCount = new ArrayList<Book>();
到bookCount[i]=cursor
并将代码bookCount.add(cursor)
更改为 Book[] bookCount = new Book[count];
并尝试
否则改变
{{1}}
并检查
答案 1 :(得分:0)
线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:21
如果您超出阵列范围,则仅显示此例外。 所以对于while循环,你想做类似的事情
=
这有意义吗?
答案 2 :(得分:0)
count
中的class2
变量存在问题。你是如何初始化它的?异常即将发生,因为您的数组大小为20,并且您在索引Book
处插入21