[英]Loop for ArrayList printing out null
我是Java新手,对于所有错误,我们深表歉意!
我创建了一个由4个类组成的Library程序:Library,Book,BookInterface和Patron。
在Book类中,我有一种方法可以打印出图书馆中的所有书籍及其状态(输入或输出)。 相反,我不断得到这样的东西:
Great Gatsby: null
Withering Heights: null
它与setStatus()方法有关吗? 每次用户添加新书时,它都会创建一个新的Book实例,然后执行setStatus(“ IN”)。 那么,为什么它不保存而是打印空值呢?
非常感谢你的帮助!!
书本类:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Book implements BookInterface
{
Scanner input = new Scanner(System.in);
static ArrayList <String> UserList = new ArrayList<String>();
static ArrayList <String> BookList = new ArrayList <String> (); //display just titles// use when checking out books
static ArrayList <String> OrigBookList = new ArrayList <String> (); //keep track of all titles ever entered
public String title;
public String author;
public String book;
public boolean checkIn;
private String status;
private String borrower;
public Book(String t, String a)
{
title = t;
author = a;
}
//constructor create new book
public Book(String newTitle)
{
title = newTitle;
}
public String toString()
{
return title + " " + author;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getAuthor()
{
return author;
}
public void setAuthor(String author)
{
this.author = author;
}
public String getStatus(String book)
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public void setBorrower(String borrower)
{
this.borrower = borrower;
}
public String getBorrower(String checkPatron)
{
return borrower;
}
public String getBook(String checkPatron)
{
return book;
}
public void setBook(String bookCheckOut)
{
this.book = bookCheckOut;
}
public void addBook()
{
Scanner input = new Scanner(System.in);
Scanner inputread = new Scanner(System.in);
System.out.print("Enter book title: ");
String title1 = inputread.nextLine();
Scanner input1 = new Scanner(System.in);
System.out.print("Enter book author: ");
String author1 = inputread.next();
Book fullBook = new Book(title1, author1); //create constructor w/ title & author
Book book1 = new Book(title1); //constructor w/ just title to be used to display all books
OrigBookList.add(title1);
book1.setStatus("IN");
System.out.println("-----------------------------------------------");
System.out.println("-----" + title1 + " is now in the library!-----");
System.out.println("-----------------------------------------------");
}
public void editBook()
{
Scanner inputread = new Scanner(System.in);
System.out.println("Enter original book title: ");
String origTitle = inputread.nextLine();
System.out.println("Enter edited book title: ");
String editedTitle = inputread.nextLine();
Collections.replaceAll(Book.UserList, origTitle, editedTitle);
System.out.println("------------------------------------------------------");
System.out.println(origTitle + " has been changed to " + editedTitle + "!");
System.out.println("------------------------------------------------------");
}
public void libraryInventory()
{
System.out.println("------------------ Library Inventory: ---------------");
for(int i =0; i<= OrigBookList.size()-1; i++)
{
//Book Title: checked in/out
System.out.println(OrigBookList.get(i) + ":" + getStatus(OrigBookList.get(i)));
}
System.out.println("-----------------------------------------------------");
}
}
getStatus(OrigBookList.get(i))
忽略传递给它的参数,仅返回您为其调用libraryInventory
方法的Book
的状态。 显然,该Book
实例没有初始化状态字段,但是即使初始化了,它也只会为您提供一本Book的状态。
与其拥有一个静态的书名列表( static ArrayList <String>
),不如您应该维护一个图书本身的列表( static ArrayList <Book>
),甚至更好的是,将该列表放在一个单独的类中(可以调用它Library
)。
诸如libraryInventory
Book
类的方法不应该在Book
类中(并且如果您坚持将它们保留在Book
类中,请使它们成为静态的,因为它们没有引用单个Book
实例)。
您的整个程序似乎都在Book
类的实例中运行。 在这里面,你正在和丢弃的新实例Book
,叫fullBook
和book1
,并为fullBook
设置其状态。 当您在程序的主Book
上调用getStatus
时,它只会返回自己的状态,该状态从未设置为任何状态。
如果要保存Book
实例的序列,则需要将实例放置在某处,而不仅仅是实例化它们,然后将标题添加到列表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.