我有一个产品的ArrayList,我想在我的Product类中添加到我的销售类地图。这样做的目的是让每个产品记录用它购买的东西和多少。
ArrayList<Product> array = new ArrayList<Product>(tempProducts.values());
for (int i = 0; i < array.size() - 1; i++) {
for (int j = i+1; j < array.size() ; j++) {
update(array.get(i), array.get(j));
}
}
}
public static void update(Product a, Product b)
{
if (a.getId().compareToIgnoreCase(b.getId()) != 0) {
if (a.getCollection().get(b.getId()) != null) {
a.getCollection().get(b.getId()).incsales();
} else {
a.getCollection().put(b.getId(), new sale(b.getId(), b.getDesc()));
}
if (b.getCollection().containsKey(a.getId())) {
a.getCollection().get(b.getId()).incsales();
} else {
b.getCollection().put(a.getId(), new sale(a.getId(), a.getDesc()));
}
}
}
我得到的结果是:
Description : Balsamic Ital Dressing 2.5L Kraft
Sales : 80
This product was purchased the most with :
1 0000795501891 Babyfood, dinner, vegetables and lamb, junior (7)
2 0000053838530 Cheese, cottage, creamed, large or small curd (7)
3 0001580359521 Macadamia Nuts Kernels 1KG Natural Grocer (7)
4 0001549470330 Orange Juice Long Life 2L Just Juice (7)
5 0000102800862 Babyfood, fruit, pears and pineapple, junior (5)
Description : Mighty Soft Bread Multigrain Sandwich 700g
Sales : 78
This product was purchased the most with :
1 0000250315049 Babyfood, cereal, barley, prepared with whole milk (7)
2 0001906925229 Coles Bread Multigrain Sliced 700g (7)
3 0001348704022 Honey Portion 48X14G Beerenberg (7)
4 0000965461817 Milk, canned, evaporated, nonfat, with added vitamin A and vitamin D (7)
5 0000883156398 Abotts Village Bakery Wholemeal Farmhouse 750g (5)
我应该得到:
Description : Balsamic Ital Dressing 2.5L Kraft
Sales : 80
This product was purchased the most with :
1 0000102800862 Babyfood, fruit, pears and pineapple, junior (4)
2 0000449778467 Decaf Ground Coffee 250G Cremadoro (4)
3 0001549470330 Orange Juice Long Life 2L Just Juice (4)
4 0000795501891 Babyfood, dinner, vegetables and lamb, junior (3)
5 0000708398761 Butter, salted (3)
Description : Mighty Soft Bread Multigrain Sandwich 700g
Sales : 78
This product was purchased the most with :
1 0000497527798 Cream Cheese Philadelphia Light 1KG Kraft (4)
2 0000890198554 Mayonnaise Fat Free 2.7KG Kraft (4)
3 0000298379350 Milk, buttermilk, dried (4)
4 0000250315049 Babyfood, cereal, barley, prepared with whole milk (3)
5 0000966839744 Babyfood, cereal, with egg yolks, strained (3)
关于如何阻止它过度计数的任何提示或线索?
更新: 尝试过PéterTörök建议,得到了这个结果:
Description : Balsamic Ital Dressing 2.5L Kraft
Sales : 80
This product was purchased the most with :
1 0001549470330 Orange Juice Long Life 2L Just Juice (7)
2 0000102800862 Babyfood, fruit, pears and pineapple, junior (5)
3 0000708398761 Butter, salted (5)
4 0002140785264 Egg, whole, dried, stabilized, glucose reduced (5)
5 0000422477496 Essence Parisian 575ML Aeroplane (5)
Description : Mighty Soft Bread Multigrain Sandwich 700g
Sales : 78
This product was purchased the most with :
1 0001906925229 Coles Bread Multigrain Sliced 700g (5)
2 0000127034559 Limonata 24X200ML San Pellegrino (5)
3 0001736609947 Babyfood, dessert, custard pudding, vanilla, junior (3)
4 0002028785759 Babyfood, dinner, beef stew, toddler (3)
5 0000432411254 Babyfood, juice, orange and pineapple (3)
答案 0 :(得分:1)
我认为问题的根源在于对于具有索引(i,j)的每对产品,在循环中处理它们两次:一次为(i,j),然后为(j,i)。请尝试使用此循环:
for (int i = 0; i < array.size() - 1; i++) {
for (int j = i + 1; j < array.size(); j++) {
update(array.get(i), array.get(j));
}
}
}
(这里内部循环计数器从i + 1
而不是0
开始。请注意,我修改了两个循环条件,因为我认为你的原始循环有一个错误 - 最后一个元素数组的索引为array.size() - 1
。)
此处还有一个复制粘贴错误:
if (b.getCollection().containsKey(a.getId())) {
a.getCollection().get(b.getId()).incsales();
然而它应该是
b.getCollection().get(a.getId()).incsales();