我有一个比较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
如何修复此比较?
答案 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的原因。