I am working on a simple program that reads a text file that contains book titles and the associated reference number. Each set of information should be turned into a Book object so that it can be sorted later on. However, in the current code, whenever a new Book should be created, it re-uses the original Book. I have added a counter to the Book class to track the amount of Book objects.
The program should create a new Book object using the book title and associated reference number. What would I change/add in order to fix this problem?
Main Class
private static ArrayList<Book> books = new ArrayList();
public static void main(String[] args) {
String path = "src//booklist.txt";
boolean endOfFile = false;
// try/catch for reading the file
try {
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
while (!endOfFile) {
String line = br.readLine();
if (line == null) {
endOfFile = true;
} else {
books.add(new Book(null, 0));
books.get(books.size() - 1).setRefNum(Integer.parseInt(line));
String bookTitle = br.readLine();
books.get(books.size() - 1).setTitle(bookTitle);
}
System.out.println(books.get(books.size() - 1).toString());
}
// Closing reader and displaying results
br.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
Book Class
private String bookTitle;
private int refNum;
private int numBooks;
public Book(String title, int referenceNumber) {
this.bookTitle = title;
this.refNum = referenceNumber;
this.numBooks++;
}
public String getTitle() {
return this.bookTitle;
}
public void setTitle(String title) {
this.bookTitle = title;
}
public int getRefNum() {
return this.refNum;
}
public void setRefNum(int referenceNumber) {
this.refNum = referenceNumber;
}
public int getNumBooks() {
return this.numBooks;
}
public String toString() {
String message = "Book Title: " + this.bookTitle
+ "\nReference #: " + this.refNum
+ "\nBook #: " + this.numBooks
+ "\n";
return message;
}
Text Document (booktitles.txt)
1
The Adventures of Tom Sawyer
2
Huckleberry Finn
4
The Sword in the Stone
6
Stuart Little
10
Treasure Island
12
The Secret Garden
14
Alice's Adventures in Wonderland
20
Twenty Thousand Leagues Under the Sea
24
Peter Pan
26
Charlotte's Web
31
A Little Princess
32
Little Women
33
Black Beauty
35
The Merry Adventures of Robin Hood
40
Robinson Crusoe
46
Anne of Green Gables
50
Little House in the Big Woods
52
Swiss Family Robinson
54
The Lion, the Witch and the Wardrobe
56
Heidi
66
A Winkle in Time
100
Mary Poppins
Current Output
Book Title: The Adventures of Tom Sawyer
Reference #: 1
Book #: 1
Book Title: Huckleberry Finn
Reference #: 2
Book #: 1
Book Title: The Sword in the Stone
Reference #: 4
Book #: 1
Book Title: Stuart Little
Reference #: 6
Book #: 1
Book Title: Treasure Island
Reference #: 10
Book #: 1
Book Title: The Secret Garden
Reference #: 12
Book #: 1
Book Title: Alice's Adventures in Wonderland
Reference #: 14
Book #: 1
Book Title: Twenty Thousand Leagues Under the Sea
Reference #: 20
Book #: 1
Book Title: Peter Pan
Reference #: 24
Book #: 1
Book Title: Charlotte's Web
Reference #: 26
Book #: 1
Book Title: A Little Princess
Reference #: 31
Book #: 1
Book Title: Little Women
Reference #: 32
Book #: 1
Book Title: Black Beauty
Reference #: 33
Book #: 1
Book Title: The Merry Adventures of Robin Hood
Reference #: 35
Book #: 1
Book Title: Robinson Crusoe
Reference #: 40
Book #: 1
Book Title: Anne of Green Gables
Reference #: 46
Book #: 1
Book Title: Little House in the Big Woods
Reference #: 50
Book #: 1
Book Title: Swiss Family Robinson
Reference #: 52
Book #: 1
Book Title: The Lion, the Witch and the Wardrobe
Reference #: 54
Book #: 1
Book Title: Heidi
Reference #: 56
Book #: 1
Book Title: A Winkle in Time
Reference #: 66
Book #: 1
Book Title: Mary Poppins
Reference #: 100
Book #: 1
Desired Output
Book Title: The Adventures of Tom Sawyer
Reference #: 1
Book #: 1
Book Title: Huckleberry Finn
Reference #: 2
Book #: 2
Book Title: The Sword in the Stone
Reference #: 4
Book #: 3
Book Title: Stuart Little
Reference #: 6
Book #: 4
Book Title: Treasure Island
Reference #: 10
Book #: 5
Book Title: The Secret Garden
Reference #: 12
Book #: 6
Book Title: Alice's Adventures in Wonderland
Reference #: 14
Book #: 7
Book Title: Twenty Thousand Leagues Under the Sea
Reference #: 20
Book #: 8
Book Title: Peter Pan
Reference #: 24
Book #: 9
Book Title: Charlotte's Web
Reference #: 26
Book #: 10
Book Title: A Little Princess
Reference #: 31
Book #: 11
Book Title: Little Women
Reference #: 32
Book #: 12
Book Title: Black Beauty
Reference #: 33
Book #: 13
Book Title: The Merry Adventures of Robin Hood
Reference #: 35
Book #: 14
Book Title: Robinson Crusoe
Reference #: 40
Book #: 15
Book Title: Anne of Green Gables
Reference #: 46
Book #: 16
Book Title: Little House in the Big Woods
Reference #: 50
Book #: 17
Book Title: Swiss Family Robinson
Reference #: 52
Book #: 18
Book Title: The Lion, the Witch and the Wardrobe
Reference #: 54
Book #: 19
Book Title: Heidi
Reference #: 56
Book #: 20
Book Title: A Winkle in Time
Reference #: 66
Book #: 21
Book Title: Mary Poppins
Reference #: 100
Book #: 22