【发布时间】: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=0到i < register.size() - 1;就足够了,但也许你需要重新构建你的逻辑。 -
看看使用比较器。然后下一个阅读你的代码的程序员不会昏倒。 docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
-
即使你解决了超出数组列表范围的索引问题,你的算法还是有缺陷的。它只会组合相邻的相同拼写项目。当生产列表 id [Banana, berry, baNANA] 时尝试手动浏览它
标签: java string arraylist indexoutofboundsexception