Программа работает хорошо, но когда я пытаюсь заставить ее вернуть "слова", она возвращает нужный объем вывода, но все имеют имя последнего ввода.
Ex. если я храню 3 разных названия книг в своем ArrayList
, он возвращает 3 раза имя последней книги.
Есть ли очевидные ошибки?
(класс суперкласса и другие классы должны работать нормально)
import java.util.*;
public class libraryManager {
public static void main (String [] args) {
String input =" ";
ArrayList<Book> books = new ArrayList<Book>();
ArrayList<CD> cds = new ArrayList<CD>();
Book booka = new Book();
CD cda = new CD();
System.out.println("Welcome to library management system");
Scanner reader = new Scanner(System.in);
Scanner newBook = new Scanner(System.in);
do{
System.out.println("Main menu: ");
System.out.println(" 1. Add book to the library ");
System.out.println(" 2. Add CD to the library ");
System.out.println(" 3. Print items ");
System.out.println(" 4. Exit ");
input = reader.nextLine();
if (input.equals("1")){
System.out.println("Input new book: ");
input = reader.nextLine();
booka.setName(input);
books.add(booka); input ="1";
}
if (input.equals("2")){
System.out.println("Input new CD: ");
input = reader.nextLine();
cda.setName(input);
cds.add(cda);
}
if (input.equals("3")){
System.out.println("Library contains:");
for (int i= 0; i<books.size(); i++){
System.out.println("Book: " + books.get(i).getName());
}
for (int i = 0; i<cds.size(); i++){
System.out.println("CD: " +cds.get(i).getName());
}
break;
}
}while(!input.equals( "4"));
}
}
Вы создаете один экземпляр книги и компакт-диска:
Book booka = new Book();
CD cda = new CD();
Затем вы добавляете тот же самый экземпляр снова и снова в списки, каждый раз изменяя его свойства. Поэтому вы видите, что все элементы имеют одинаковое значение (значение последнего добавленного элемента).
Вы должны создать новый экземпляр для каждого раза, чтобы добавить элемент в один из списков.
Например:
if (input.equals("1")){
System.out.println("Input new book: ");
input = reader.nextLine();
Book booka = new Book(); // add this
booka.setName(input);
books.add(booka); input ="1";
}
booka.setName(input);
books.add(booka); input ="1";
Вот проблема! Вы добавляете то же самое вместо booka
каждый раз, поэтому последнее имя, которое вы задали для booka, - это имя, которое вернет всякая ссылка на него в ArrayList!