当值不同时,equalsIgnoreCase不工作

时间:2016-01-28 16:50:50

标签: java string arraylist indexoutofboundsexception

我有一个比较arraylist中两个产品名称的方法,这是方法:

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);

                }
        }
    }

在arraylist上,我有3种产品,[Banana,baNANA,berry]。对于第2个索引(Banana,baNANA),它正如预期的那样工作,if是比较产品名称和编辑索引的值,用新的两个具有相同名称的产品的总和......但是,当比较在Banana和berry之间时,if返回true,但应该是false,因为值不相等。另外,我收到了这个错误:

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

如何修复此比较?

1 个答案:

答案 0 :(得分:0)

您有三种产品。

如果i = 2,那么,

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

register.get(i)没问题,它有索引2,即最后一个元素的索引。但是register.get(i + 1)现在是一个传递arraylist最后一个元素的索引。也就是说,i + 1 == register.size()。这就是你得到IndexOutOfBoundsException的原因。

相关问题