当前位置: 首页 > 面试题库 >

Java ArrayList / RMI

巢承安
2023-03-14
问题内容

我建立了一个简单的项目类。

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。
”,显然*是用户输入的数字。


问题答案:

作为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.auctionID应该使用selectedInfo.getAuctionId()和来代替使用。selectedInfo.setAuctionId(x);

3-您可能应该考虑使用开关而不是if(scanner.next()。equals(“
1”))。另外,如果最后写了if(scanner.next()。equals(“
2”)),那么您将遇到问题,因为每次调用scan.next()时,它都会期望输入,因此期望输入每个如果。相反,您应该将switch.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-最后,您可能应该将处理每个菜单选项的功能拆分为单独的方法。如果将所有内容放到这种方法中,它将很快变得非常庞大和难看(难以维护)。



 类似资料:
  • 问题内容: 我有一个OSGi应用程序。使用EJB context.lookup,我必须将Thread上下文类加载器设置为bundle类加载器,以便进行转换。像这样: 输出是 org.apache.felix.framework.BundleWiringImpl@7468776f 此代码有效。如果我有ArrayList我无法转换的问题 此代码返回ClassCastException。 检查 返回NU

  • 问题内容: 我一直在将RMI用于当前正在处理的项目,并且希望将多个主机绑定到单个RMI注册表。 但是,当我尝试这样做时,我收到一条错误消息: java.rmi.AccessException:不允许Registry.Registry.bind;origin / 192.168.0.9是非本地主机 我这样做是在谷歌上进行的,似乎RMI默认情况下会阻止远程主机进行绑定,我想知道是否有某种方法可以覆盖或

  • 问题内容: 套接字编程,rmi和Servlet之间有什么区别。什么时候使用什么? 问题答案: 套接字API是Java应用程序与网络交互以及与远程客户端和服务进行扩展的低级(传输级)抽象。套接字和相关的API支持可靠的字节流和不可靠的消息传递服务。它们通常用于TCP / IP和UDP / IP,尽管可以(至少在理论上)支持其他网络协议栈。 RMI是用于在Java应用程序之间实现应用程序级网络的框架和

  • 问题内容: 我正在尝试制作Java RMI客户端/服务器应用程序。我在启动应用程序服务器端时遇到问题,因为在我尝试启动应用程序服务器端时,在调用Registry.bind()方法期间,它一直运行在 ClassNotFoundException 中。 我从这里的简单教程开始:http : //docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hell

  • 问题内容: 我在使用Java rmi时遇到问题: 当我尝试运行服务器时,出现了connectException(请参见下文)。 执行rebind方法时发生异常: 当改用rmi:// localhost:2020 / RemoteDataPointHandler时,它也不起作用。另外,使用默认端口不起作用。我也尝试使用127.0.0.1 ip地址,但效果相同。 我的运行时参数: 问题答案: 当我更换

  • 问题内容: 我有一个RMI服务器和一个桌面RMI客户端。重新启动服务器时,客户端出现错误。是否可以在不重新启动客户端的情况下重新启动RMI连接? [编辑]这是堆栈跟踪: 问题答案: 服务器终止后,您将收到一个ConnectException。之后,您可以使用Naming.lookup获取新的服务器对象。

  • 问题内容: 我使用 -Djava.rmi.server.hostname = localhost 选项使rmi仅在localhost上侦听,但netstat显示套接字在 0.0.0.0 上侦听。 奇怪的是,RMI RenewClean线程使用本地主机显示它。例如RMI RenewClean- [localhost:59357] 我假设如果设置 -Djava.rmi.server.hostname

  • 问题内容: 在我们的应用程序中,我们以非常不同的方式将RMI用于客户端-服务器通信: 将数据从服务器推送到客户端以进行显示。 从客户端向服务器发送控制信息。 这些控制消息的回调从服务器到达客户端的代码路径(边栏说明-这是某些旧有代码的副作用,而不是我们的长期意图)。 我们要做的是确保我们所有与RMI相关的代码仅使用已知的指定端口清单。这包括注册表端口(通常应为1099),服务器端口以及由回调产生的