Java 数组列表/RMI

标签 java arraylist rmi tostring

我构建了一个简单的项目类;

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

我已经创建了一个 ArrayList;

ArrayList<itemInfo> itemSet = new ArrayList<itemInfo>();

我这里还有一个允许用户创建项目的方法(该方法不完整,到目前为止我只尝试实现 choice == 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 的方法Price: ****”,显然 **** 是用户输入的数字。

最佳答案

作为 ItemSet,是 itemInfo 对象的 ArrayList,您可以像这样遍历它们:

for(itemInfo info : itemSet){

    System.out.println(info.actionID);
    System.out.println(info.auctionPrice);
    System.out.println(info.buyoutPrice);

}

这会将它们全部打印出来。 或许,当您包含 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);
}

在你学习的过程中,这里有一些东西可以让你的代码更好一些:

1-类名应该以大写开头,你应该把itemInfo改成ItemInfo。

2- 您通常应该使用 getter 和 setter,因此您应该使用 selectedInfo.getAuctionId()selectedInfo.setAuctionId 而不是使用 selectedInfo.auctionID (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
 }

4- 最后,您可能应该将处理每个菜单选项的功能拆分为单独的方法。如果你把它全部放入这个方法中,它会很快变得非常大和丑陋(难以维护)。

关于Java 数组列表/RMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806589/

相关文章:

java - 如何处理Gradle和多项目配置?

java - IntelliJ 可以隐藏 Java 样板代码吗? getter 和 setter

java - 将 ArrayList<HashMap<String, String>> 追加到另一个 ArrayList<HashMap<String, String>>

Java:从文件扫描到数组列表,然后最小/最大/平均值/标准偏差

java - Java RMI 回调表异常中没有此类对象

java - RMI ClassCastException 到远程接口(interface)

java - 尝试播放音频文件时 JLayer 异常

java - 验证表中文本是否位于 2 个指定项目之间的最佳方法 - Selenium - Java

java - 具有要在 Excel 中显示的不同数据的列表

java - RMI Server的哪一部分是用多线程实现的