首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用indexOf?

如何使用indexOf?
EN

Stack Overflow用户
提问于 2014-11-14 02:45:58
回答 3查看 100关注 0票数 0

我有一个名为itemList的数组列表,其中包含许多项。每件商品都是RetailItem类型,包含一个描述、价格、库存数量和一个产品代码。我尝试做的是使用indexof方法在数组列表中搜索匹配的项,但遇到了问题。也许我想得太多了,但从我开始尝试解决这个问题到现在已经两个小时了。

我将在程序中做其他事情,但首先我必须找到匹配的项目,这是我无法理解的代码片段:

代码语言:javascript
复制
System.out.println("Enter UPC for an item you want, enter -1 when done");

    boolean found = false;
    do {
        System.out.print("\nEnter a UPC ");
        targetUPC = keyboard.nextLine();
        RetailItem temporary = new RetailItem("Default", 0, 0, targetUPC);

        System.out.println(targetUPC);
        int retval = itemList.indexOf(targetUPC);
        System.out.println("It's at index " + retval);

编辑: indexOf总是返回-1。例如,itemList中的第一项(这是RetailItems的arrayList )是这样的:玉米Crisps,9.45,35,61835。

当我进入UPC 61835时,indexOf在索引0处找不到它

也许我说不通,我可能得一直想办法弄明白

EN

回答 3

Stack Overflow用户

发布于 2014-11-14 03:06:44

如果为RetailItem类创建toString()函数,则可以比较字符串,因为每个对象都有一个字符串表示。您可以选择以与用户进入UPC时要查找的对象相匹配的方式来表示对象。

票数 0
EN

Stack Overflow用户

发布于 2014-11-14 03:09:17

indexOf的作用是:遍历列表,并测试列表中的每个RetailItem是否与作为参数传递给indexOf()的对象相等(使用equals())。

RetailItem不能等于字符串。字符串不能等于RetailItem。所以这不可能行得通。

因此,您需要自己迭代,以找到其targetUPC等于用户输入的targetUPC的第一个RetailItem。

代码语言:javascript
复制
int index = -1;
for (int i = 0; i < list.size(); i++) {
    if (list.get(i).getTargetUpc().equals(targetUpc) {
        index = i;
        break;
     }
}
票数 0
EN

Stack Overflow用户

发布于 2014-11-14 03:11:13

我假设您使用的是ArrayList。

在indexOf实现中:

代码语言:javascript
复制
public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }

如您所见,indexOf使用equals,比较两个不同的实例会得到一个false。

您应该像在Java的String类中一样使用interning。当创建Class的实例时,如果具有相同参数的引用已经存在,它应该返回一个预先存在的引用。

我不是这方面的专家,也许你可以在这个话题上找到一些帮助:Good pattern for creating an object that supports interning?

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26916175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档