2015-12-13 2 views
0

Я новичок в Java, поэтому извините за все ошибки!Loop для ArrayList распечатать null

Im создает библиотечную программу, состоящую из 4 классов: Библиотека, Книга, BookInterface & Покровитель.

В классе книги у меня есть метод, который печатает все книги в библиотеке и их статус «(в или из). Вместо этого я получаю что-то вроде этого:

Great Gatsby: null            

Withering Heights: null 

Связано ли это с методом setStatus()? Каждый раз, когда пользователь добавляет новую книгу, он создает новый экземпляр книги, а затем я устанавливаю 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("-----------------------------------------------------"); 
    } 

} 
+0

При печати, который Arraylist дает вам null? – user3437460

+0

У вас должны быть отдельные классы, ваша «книга» - это какой-то странный зверь в опубликованном коде –

+0

@ user3437460 'OrigBookList' в' libraryInventory() ' – kayylai

ответ

0

Ваша целая программа, кажется, работает внутри экземпляра класса Book. В нем вы делаете и отбрасываете новые экземпляры Book, называемые fullBook и book1, а для fullBook вы устанавливаете свой статус. Когда вы вызываете getStatus на основной Book в своей программе, он просто возвращает свой статус, который никогда не был установлен ни на что.

Если вы хотите сохранить последовательность экземпляров Book, вам нужно разместить экземпляры где-нибудь, а не просто создавать их, а затем добавить заголовок в список.

3

getStatus(OrigBookList.get(i)) игнорирует параметр, который вы передаете ему, и возвращает статус Book, для которого вы назвали метод libraryInventory. Очевидно, что экземпляр Book не имеет инициализированного поля состояния, но даже если он и сделал, он предоставит вам статус только одной Книги.

Вместо того, чтобы иметь статический список названий книг (static ArrayList <String>), возможно, вы должны вести список книг самого (static ArrayList <Book>), или еще лучше, поместить этот список в отдельном классе (можно назвать его Library).

методы, такие как libraryInventory не должно быть в Book классе (и если вы будете настаивать на сохранении их в Book классе, сделать их статическими, так как они не относятся к одному Book например).

+0

Привет! спасибо за ваш совет, это действительно помогает прояснить ситуацию. Я просто сменил ArrayList с на и переместил его за пределы класса «Книга». Поскольку статус «каждой книги» не точно сохраняется, могу ли я создать новый ArrayList, который сохраняет как название книги, так и ее статус и использует ее в библиотеке? – kayylai

+0

@kayylai Статус является членом класса Book, поэтому, если он не сохранен, это означает, что вы не устанавливаете его значение в объектах Book, которые вы добавляете в список. Вам не нужен другой список. – Eran

Смежные вопросы