2014-12-03 67 views
0

我有一个借款人类,它由一个名字组成,然后它还存储了一个充满该人借来的物品的数组列表。如何创建一个类的多个实例?

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

我无法理解如何创建多个实例。我只是不断遇到覆盖借用课程的问题。

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

我希望能够根据用户输入创建多个借款人实例?

我试过保存整个借款人类。我不确定这是否会起作用,因为它不会排序,所以我不能添加多个名称或出现错误。

借款类

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

找出一个*数组*的时间。 – 2014-12-03 22:03:10

+2

除了保留借款人名单的List,你可以保留一个'借款人'对象的List。所以当你问谁在借用某些东西时,你首先从该列表中获得该借用者对象,并将该项目添加到其“itemList”中 - 是否有帮助? – ochi 2014-12-03 22:05:15

+1

其实,借款人的地图可能更合适。然后,每个借款人都可以通过名字插入到地图中。 – 2014-12-03 22:06:25

回答

1

使用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>(); 
+2

“TreeMap”会自动按键排序。 – 2014-12-05 11:38:29

-1

您可以将列表改变这种

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

+0

这就像一个'地图',但速度较慢,用户不太友好。 – 2014-12-06 10:16:39

+0

公平的评论,我只是试图保持OP所使用的现有结构(因为很明显他对Java世界是新手)。引入更好的结构/对象来完成这项任务,虽然对于Java中的老帽子来说很明显,但可能会让新学习者不必要地变得更复杂。噢,我不同意用户不太友好,但我认为这是一个意见问题。 – ochi 2014-12-08 18:12:34

相关问题