3

您好,我无法打印出 ArrayList 中的项目。我可以在我的 PatronBorrow 方法中将其打印出来,但在 PatronList 和 PatronReturn 中它不会打印任何内容。谁能告诉我代码有什么问题?非常感谢大家

package proj1;

import java.util.ArrayList;
import java.util.List;


public class Patron {

private int id;
private Book book;
private List<Book> books;

public Patron(int id){
    this.id = id;
    books = new ArrayList<Book>();
}

public int getID(){
    return id;
}

public List<Book> getBooks(){
    return books;
}

public void PatronBorrow(String b){
    book = new Book(b);
    books.add(book);
    System.out.println("Patron " + id + " has borrowed " + book.getTitle());
}

public void PatronReturn(String b){
    for(Book book : books){
        if(book.getTitle().equals(b)){
            books.remove(book);
            System.out.println("Patron " + id + " has borrowed " +     book.getTitle());
        }
    }
}

public void PatronList(){
    for(Book b : books){
        System.out.println("Patron " + id + " has borrowed " + books.size() + " item(s)");
        System.out.println(b);
    }
}

}

package proj1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Project1 {

public static boolean isNumeric(String str){
    for(char c : str.toCharArray()){
        if(Character.isDigit(c)){
            return true;
        }
    }
    return false;
}

public static void main(String[] args){

    String command;
    String line;
    Patron patron;
    int patronID;
    String title;
    String newTitle;
    String infile = args[0];

    if (args.length != 1){
        throw new IllegalArgumentException("Enter in file name");
    }

    try{
        Scanner file = new Scanner(new FileInputStream(infile));
        while(file.hasNext()){
            command = file.next();
            if(isNumeric(command)){
                patronID = Integer.parseInt(command);
                patron = new Patron(patronID);
                command = file.next();
                if(command.equals("borrow")){
                    title = file.nextLine();
                    newTitle = title.substring(2, title.length() - 1);
                    patron.PatronBorrow(newTitle);
                }else if(command.equals("return")){
                    title = file.nextLine();
                    newTitle = title.substring(2, title.length() - 1);
                    patron.PatronReturn(newTitle);
                }else if(command.equals("list")){
                    patron.PatronList();
                }
            }else{

            }
        }

    }catch (FileNotFoundException e) {
        System.out.println("File not found" + e.getMessage());
        System.exit(0);
    }


}

}

4

1 回答 1

4

在使用Patron该类的循环中,您Patron每次都创建一个新的(空白)。

如果你想在顾客之间切换,你想要做Map<Integer, Patron> patrons的是在你的主要功能中有一个或类似的东西。不是new Patron(patronID)每次都创建一个,而是从 检索它patrons,如果那里还没有一个,则只创建一个(并将其存储在地图中)。

(As far as your Patron class, though, you might find if you do some real testing of that class that PatronReturn often throws an exception when you remove a book. ConcurrentModificationException, namely, cause you're removing from a list you're iterating over at the time. Just a heads up.)

于 2013-03-02T23:16:54.813 回答