Java ArrayList/RMI

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的方法***"显然****是用户输入的数字.

The*_*son 4

由于 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-最后,您可能应该将处理每个菜单选项的功能拆分为单独的方法。如果您将所有内容都放入此方法中,它将很快变得非常大且丑陋(难以维护)。