【问题标题】:equalsIgnoreCase not working when value are different [duplicate]当值不同时,equalsIgnoreCase 不起作用[重复]
【发布时间】:2016-01-28 16:50:50
【问题描述】:

我有一个比较数组列表中两个产品名称的方法,方法如下:

public void compareNames(ArrayList<Register> register) {
        Register registerNew = null;
        Product productNew = null;
        int sumEqualProducts =0;
        for (int i = 0; i <register.size() ; i++) {
                if ( register.get(i).getProduct().getNameOfProduct().equalsIgnoreCase(register.get(i+1).getProduct().getNameOfProduct())) {
                    sumEqualProducts = register.get(i).getQuantity() + register.get(i + 1).getQuantity();
                    register.remove(i+1);
                    productNew = new Product(register.get(i).getProduct().getNameOfProduct(), register.get(i).getProduto().getUnitValue());
                    registerNew = new Register(productNew, sumEqualProducts);
                    register.set(i, registerNew);

                }
        }
    }

在数组列表中,我有 3 个产品,[Banana,baNANA,berry]。对于第 2 个索引(Banana,baNANA),它按预期工作,if 是比较产品的名称并编辑索引的值,以及一个新的具有相同名称的 2 个产品的总和......但是,当比较 Banana 和 berry 时,if 返回 true,但应该为 false,因为值不相等。另外,我收到此错误:

java.lang.IndexOutOfBoundsException: Index: 2, Size: 2

如何解决这种比较问题?

【问题讨论】:

  • 问题来自您当前的位置i,您正在添加register.get(i) + register.get(i+1) 的值,而i 遍历您的整个集合。因此,如果您的 i 具有集合中最后一项的索引,则 i+1 不存在(超出范围)。我认为让你 for 循环运行 i=0i &lt; register.size() - 1; 就足够了,但也许你需要重新构建你的逻辑。
  • 看看使用比较器。然后下一个阅读你的代码的程序员不会昏倒。 docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
  • 即使你解决了超出数组列表范围的索引问题,你的算法还是有缺陷的。它只会组合相邻的相同拼写项目。当生产列表 id [Banana, berry, baNANA] 时尝试手动浏览它

标签: java string arraylist indexoutofboundsexception


【解决方案1】:

你有三个产品。

如果 i = 2,那么,

if ( register.get(i).getProduct().getNameOfProduct().equalsIgnoreCase(register.get(i+1).getProduct().getNameOfProduct()))

register.get(i) 很好,它的索引为 2,即最后一个元素的索引。但是 register.get(i+1) 现在是一个传递数组列表最后一个元素的索引。也就是说,i+1 == register.size()。这就是您收到 IndexOutOfBoundsException 的原因。

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2018-08-14
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多