Java ArrayList / RMI

我已经建立了一个简单的项目类;

class itemInfo{ int auctionID; int startPrice; int buyoutPrice; } 

我创建了一个ArrayList;

 ArrayList itemSet = new ArrayList(); 

我在这里也有一个允许用户创建项目的方法(方法不完整,我到目前为止只尝试实现选择== 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); } } 

我坚持的是构建一种方法,允许用户查看当前项目拍卖的列表,基本上是打印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); } 

这将打印出来。 也许,当您包含ID时,您可以要求用户输入ID,然后您可以从arraylist中检索该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); } 

在您学习的过程中,以下是使您的代码更好一些的一些方法:

1-类名称应以大写开头,您应将itemInfo更改为ItemInfo。

2-你通常应该使用getter和setter,所以你应该使用selectedInfo.getAuctionId()selectedInfo.setAuctionId(x);而不是使用selectedInfo.auctionID selectedInfo.setAuctionId(x);

3-您应该考虑使用开关而不是if(scanner.next()。equals(“1”))。 此外,如果你最终写入其他if(scanner.next()。等于(“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 } 

4-最后,您应该将处理每个菜单选项的function拆分为单独的方法。 如果你把这一切都放到这个方法中,那么它会变得非常大而且难以维护(很难维护)。

以ThePerson的答案为基础:

 for(ItemInfo info : itemSet){ System.out.println(info.actionID); System.out.println(info.auctionPrice); System.out.println(info.buyoutPrice); } 

您可以在itemInfo类上使用toString()。

 class ItemInfo{ int auctionID; int startPrice; int buyoutPrice; @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Auction ID: "); sb.append(auctionID); sb.append("\nStart price: "); sb.append(startPrice); sb.append("\nBuyout price: "); sb.append(buyoutPrice); return sb.toString(); } 

那么for循环就变成了

 for(ItemInfo info : itemSet){ System.out.println(info); } 

您可以覆盖toString()方法以返回带有3个getter的itemInfo,以返回3个存储的vaules。 必须将每个vaule转换为String,因为getter将返回int。