程序运行良好,但是当我尝试让它返回“单词”时,它返回正确的输出量,但都具有最后输入的名称。
实施例。如果我在ArrayList
中存储了3个不同的图书名称,则会返回上一本书名称的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"));
}
}
答案 0 :(得分:2)
您正在创建Book和CD的单个实例:
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";
}
答案 1 :(得分:1)
booka.setName(input);
books.add(booka); input ="1";
这是问题所在!您每次都添加相同而不是booka
,因此您设置为booka的姓氏是ArrayList中对它的每个引用都将返回的名称!