Mic*_*_GG 6 java rmi arraylist tostring
我已经建立了一个简单的项目类;
class itemInfo{
int auctionID;
int startPrice;
int buyoutPrice;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个ArrayList;
ArrayList<itemInfo> itemSet = new ArrayList<itemInfo>();
Run Code Online (Sandbox Code Playgroud)
我在这里也有一个方法允许用户创建一个项目(方法不完整,我到目前为止只尝试实现选择== 1!);
public void auctionChoice(){
System.out.println("---- What would you like to do? ----\n");
System.out.println("1: List an item for auction\n");
System.out.println("2: Bid on an existing item\n");
System.out.println("3: Remove an item from the auction\n");
if(scanner.next().equals("1")){
itemInfo createdItem = new itemInfo();
System.out.println("----Enter the auctionID----");
createdItem.auctionID = scanner.nextInt();
System.out.println("----Enter the item startPrice----");
createdItem.startPrice = scanner.nextInt();
System.out.println("----Enter the buyoutPrice----");
createdItem.buyoutPrice = scanner.nextInt();
System.out.println("Auction ID:" +createdItem.auctionID+ "\nstartPrice:" +createdItem.startPrice+ "\nbuyoutPrice:" +createdItem.buyoutPrice);
itemSet.add(createdItem);
}
}
Run Code Online (Sandbox Code Playgroud)
我所坚持的是构建一种方法,允许用户查看当前项目拍卖的列表,基本上是打印itemSet ArrayList的方法.
我已经研究过使用toString()但我不确定如何让它返回多个值,即auctionID,startPrice,buyoutPrice.
理想情况下,我希望用户选择诸如"查看当前拍卖"之类的选项,然后选择以"拍卖ID:****起始价格:****购买价格:*"等格式打印整个ArrayList的方法***"显然****是用户输入的数字.
由于 ItemSet 是 itemInfo 对象的 ArrayList,您可以像这样循环它们:
for(itemInfo info : itemSet){
System.out.println(info.actionID);
System.out.println(info.auctionPrice);
System.out.println(info.buyoutPrice);
}
Run Code Online (Sandbox Code Playgroud)
这会将它们全部打印出来。也许,当您包含 ID 时,您可以要求用户接下来输入 ID,然后您可以从数组列表中检索该 ID。您可以通过循环遍历所有这些并将它们的 ID 与用户输入的 ID 进行比较来完成此操作。例如:
// get the ID
int auctionId = scanner.nextInt();
itemInfo selectedInfo;
// find that item
for(itemInfo info : itemSet){
if(info.auctionId = auctionId){
selectedInfo = info;
break;
}
}
if(selectedInfo == null){
// the ID was not valid!
// do something to handle this case.
} else {
System.out.println(selectedInfo.auctionID);
System.out.println(selectedInfo.auctionPrice);
System.out.println(selectedInfo.buyoutPrice);
}
Run Code Online (Sandbox Code Playgroud)
在您学习的过程中,以下几点可以使您的代码变得更好:
1-类名应以大写开头,您应将 itemInfo 更改为 ItemInfo。
2-您通常应该使用 getter 和 setter,因此selectedInfo.auctionID您应该使用selectedInfo.getAuctionId()and而不是使用 。selectedInfo.setAuctionId(x);
3-您可能应该考虑使用开关而不是 if(scanner.next().equals("1"))。另外,如果你最终写了 else if(scanner.next().equals("2")) 那么你会遇到一个问题,因为每次调用 Scanner.next() 时,它都需要输入,因此它会期望每个 if 的输入。相反,您应该将scanner.next()放在开关之外,然后使用读入的值。例如:
int menuSelection = scanner.nextInt();
switch(menuSelection){
case 1:
// do your stuff
break;
case 2:
// do something else
break;
default:
// handle any input which isn't a menu option
}
Run Code Online (Sandbox Code Playgroud)
4-最后,您可能应该将处理每个菜单选项的功能拆分为单独的方法。如果您将所有内容都放入此方法中,它将很快变得非常大且丑陋(难以维护)。