如何创建一个类的多个实例?

时间:2014-12-03 21:59:24

标签: java arraylist sortedlist

我有一个借用者类,它由一个名字组成,然后它还存储一个充满了该人借来的物品的arraylist。

我希望能够从我的main创建此类的多个实例,然后能够访问它们以查看他们借用的项目。

我无法理解如何创建多个实例。我只是一直在讨论覆盖Borrowed类的问题。

所以在下面的代码中,如果我创建newBorrower(“Tim”)然后addItem(“Wrench”),然后去创建newBorrower(“john”),那么我将覆盖newBorrower。

我希望能够根据用户输入创建多个Borrower实例吗?

我试过保存整个Borrower类。我不确定这是否可行,因为它不会排序所以我不能添加多个名称或者我收到错误。

借款人类

public class Borrower 
{

    protected String name;
    protected String item;

    ArrayList<String> itemList = new ArrayList<String>();

    public Borrower()
    { 
    }

    public Borrower(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void addItem(String item)
    {
        this.item = item;
        itemList.add(item);
    }

主类

public class WhoBorrowedIt 
{

    public static void main(String[] args) 
    {
        ArraySortedList<String> borrowersList = new ArraySortedList<String>();
        Borrower newBorrower = new Borrower();
        Borrower otherBorrower = new Borrower();

        Scanner inName = new Scanner(System.in);
        Scanner inItem = new Scanner(System.in);

        String item;
        String name;

        String menu;
        int option;

        menu = "Make a selection: " + "\n" 
                + "1. Add Borrower" + "\n"
                + "2. Add Item Borrowed" + "\n"
                + "3. Remove Item Returned" + "\n"
                + "4. View Borrowers" + "\n"
                + "5. Exit";

        do
        {
            Scanner in = new Scanner(System.in);
            System.out.println(menu);
            option = in.nextInt();

            switch(option)
            {
                case 1: //create borrower
                {
                    System.out.println("Enter Name");
                    name = inName.nextLine();
                    newBorrower = new Borrower(name);
                    borrowersList.add(newBorrower.getName());
                    break;
                }

                case 2: //add items
                {
                    System.out.println("Enter item");
                    item = inItem.nextLine();
                    System.out.println("Who is borrowing");
                    name = inName.nextLine();
                    if(borrowersList.contains(name))
                    {
                        newBorrower.addItem(item);
                    }
                    else
                    {
                        newBorrower = new Borrower(name);
                        borrowersList.add(newBorrower.getName());
                        newBorrower.addItem(item);
                    }
                }
        }while(option != 5)
}
}

2 个答案:

答案 0 :(得分:2)

使用Map这样的

if (borrowersMap.containsKey(name))
{
    borrowersMap.get(name).addItem(item)
}
else
{
    newBorrower = new Borrower(name);
    borrowersMap.put(newBorrower.getName(), newBorrower);
    newBorrower.addItem(item);
}

其中borrowersMap是HashMap

Map<String, Borrower> borrowersMap = new HashMap<String, Borrower>();

答案 1 :(得分:0)

您可以将列表更改为

List<Borrower> borrowerList = new ArraySortedList<Borrower>();

然后在您的程序中添加一个按名称获取借款人的方法

private Borrower getBorrowerByName( String borrowerName ){
    for( Borrower borrower : borrowerList ){
        if( borrower.getName().equalsIgnoreCase( borrowerName ) ){
            return borrower;
        }
    }
    return null;
}

然后当您创建新借用者时,将其添加到列表中 - 当您获得现有借用者时,您可以使用该方法并在向其添加项目之前检查null