2017-03-19 8 views
0

リンクされた各リストには、ISBN、著者名、書籍の日付、書籍の価格があり、ブックカタログ全体(x個の書籍)をファイルとして保存しようとしています。 167 =のクラス1からリンクされたリストをファイルに印刷する方法

(本newBook:g.SaveFile())ここ

コードである彼らは、Java

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) 

でエラーが発生した前記しましたクラス2から

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()); 

} 

カウントは、多くの書籍がカタログにあるかを続けるグローバルVARです。スレッド "メイン" java.lang.ArrayIndexOutOfBoundsExceptionで

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

申し訳ありませんを確認し

を試してみてください、それは正確にあなたの問題が何であるかように、ファイルではないのArrayList –

+1

にリンクリストですか? – UnholySheep

+0

ファイルを作成しますが、ファイルには何も保存されず、そのメッセージが生成されます。 –

答えて

1

Bookを挿入しています。 what

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

カーソルが最終的にあなたのwhileループが無限に実行される方法。
をチェックして、あなたはまた、役割のチェックに再生され、ここで

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

配列のサイズを慎重に持ってください

[] ArrayList<Book> I、Eチェンジ宣言

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

に本を変更してみてください〜ArrayList<Book> bookCount = new ArrayList<Book>(); と変更コードbookCount[i]=cursorbookCount.add(cursor)

とそうでない

Book[] bookCount = new Book[count]; 

を変更し、

+0

headはリストのエントリポイントです。 –

+0

これが有用な場合に受け入れを示します –

+0

それはarraylistではないリンクリストです。ごめんなさい! –

0

例外:21

あなたは配列を超えて行ってきた場合に、この例外は唯一のディスプレイが及びます。 だから、あなたがこの

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

ような何かをしたい、whileループのために、この理にかなっていますか?

+0

'cursor'は' Book'と 'カウンタは整数型なので、この比較は意味がありません – UnholySheep

+0

私はこれを例として使用していました。 私は、ループ内にないものにループがアクセスするのを防ぐために、しばらくの間(a Dajan3

0

count変数には、class2に問題があります。どのように初期化しましたか?あなたの配列のサイズが20であるため例外が来ているとあなたはあなたのコードは、私はあなたのコードでheadあるものを作るカント不完全であるインデックス21

+0

countはグローバル変数です –

関連する問題