Java 如何创建一个类的多个实例?
我有一个类借用器,它由一个名字组成,然后它还存储一个arraylist,其中包含该人借用的项目 我希望能够从我的main创建这个类的多个实例,然后能够访问它们以查看它们借用的项目 我很难理解如何创建多个实例。我只是不断遇到覆盖借用类的问题 因此,在下面的代码中,如果我创建newBorrower(“Tim”),然后添加项(“扳手”),然后转到创建newBorrower(“john”),那么我将覆盖newBorrower 我希望能够基于用户输入创建多个借用者实例 我试着拯救整个借款者阶层。我不确定这是否有效,因为它不会排序,所以我不能添加多个名称,否则会出错 借款人类别Java 如何创建一个类的多个实例?,java,arraylist,sortedlist,Java,Arraylist,Sortedlist,我有一个类借用器,它由一个名字组成,然后它还存储一个arraylist,其中包含该人借用的项目 我希望能够从我的main创建这个类的多个实例,然后能够访问它们以查看它们借用的项目 我很难理解如何创建多个实例。我只是不断遇到覆盖借用类的问题 因此,在下面的代码中,如果我创建newBorrower(“Tim”),然后添加项(“扳手”),然后转到创建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);
}
公共类借款人
{
受保护的字符串名称;
受保护的字符串项;
ArrayList itemList=新建ArrayList();
公共借款人()
{
}
公共借款人(字符串名称)
{
this.name=名称;
}
公共字符串getName()
{
返回名称;
}
公共无效附加项(字符串项)
{
this.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)
}
}
public类编辑
{
公共静态void main(字符串[]args)
{
ArraySortedList借款者列表=新建ArraySortedList();
借款人新借款人=新借款人();
借款人其他借款人=新借款人();
Scanner inName=新扫描仪(System.in);
Scanner inItem=新扫描仪(System.in);
字符串项;
字符串名;
字符串菜单;
int选项;
menu=“进行选择:”+“\n”
+“1.添加借用者”+“\n”
+“2.添加借用的项目”+“\n”
+“3.删除返回的项目”+“\n”
+“4.查看借款人”+“\n”
+“5.退出”;
做
{
扫描仪输入=新扫描仪(系统输入);
系统输出打印项次(菜单);
option=in.nextInt();
开关(选件)
{
案例1://创建借款人
{
System.out.println(“输入名称”);
name=inName.nextLine();
newBorrower=新借款人(名称);
添加(newBorrower.getName());
打破
}
案例2://添加项目
{
系统输出打印项次(“输入项”);
item=inItem.nextLine();
System.out.println(“谁在借款”);
name=inName.nextLine();
if(借用者列表包含(名称))
{
newBorrower.addItem(项目);
}
其他的
{
newBorrower=新借款人(名称);
添加(newBorrower.getName());
newBorrower.addItem(项目);
}
}
}while(选项!=5)
}
}
像这样使用地图
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>();
Map-borrowersMap=newhashmap();
您可以将列表更改为
List<Borrower> borrowerList = new ArraySortedList<Borrower>();
然后,当您创建一个新的借贷者时,您将其添加到列表中-当您获得一个现有的借贷者时,您使用该方法并在向其添加项目之前检查null
。是时候找出数组是什么了。您可以保留借贷者对象的列表,而不是保留借贷者名称的列表。因此,当你问谁在借东西时,你首先得到借书人对象(从列表中)并将项目添加到其项目列表中
-这有帮助吗?实际上,借款人地图可能更合适。然后可以按名称将每个借款人插入地图。@热单击可能按名称将地图添加到地图中。您已经拥有创建多个借款人的机制。它在您的借款人类中。检查您如何处理借用多个项目的借款人。执行与借用人类似的操作。基本上,从借用人类中借用来存储借用人。一个TreeMap
会自动按键排序。这类似于Map
,但速度较慢,用户友好性较差。公平地说,我只是试图保持现有结构不变OP正在使用(很明显,他对Java世界还不熟悉)。引入更好的结构/对象来完成任务,这在Java中是显而易见的,但对于新手来说,可能会使事情变得更复杂,这是不必要的。哦,我不同意用户友好程度降低,但我想这是一个意见问题。
private Borrower getBorrowerByName( String borrowerName ){
for( Borrower borrower : borrowerList ){
if( borrower.getName().equalsIgnoreCase( borrowerName ) ){
return borrower;
}
}
return null;
}