家庭作业:确定购物车中最受欢迎的两种商品的算法



我正在尝试确定用户购物车中最受欢迎的两种商品。

每次用户向购物车添加或从购物车中删除项目时,都会调用函数updatePopularity(Item item),该函数会传递一个引用更新对象的参数。以下是代码片段:

private void updatePopularity(InventoryItem item)
{
InventoryItem tempItem;
if (mostPopular == null)
{
if (item.count > 0)
{
mostPopular = item;
mostPopularLabel.setText(MOST_POPULAR + " " + item.name);
}
}
else if (nextPopular == null)
{
if (mostPopular.name != item.name && item.count > 0)
{
nextPopular = item;
nextPopularLabel.setText(NEXT_POPULAR + " " + item.name);
}
}
else if (mostPopular.count < item.count)
{
tempItem = mostPopular;
mostPopular = item;
mostPopularLabel.setText(MOST_POPULAR + " " + item.name);
nextPopular = tempItem;
nextPopularLabel.setText(NEXT_POPULAR + " " + nextPopular.name);
}
else if (nextPopular.count < item.count)
{
nextPopular = item;
nextPopularLabel.setText(NEXT_POPULAR + " " + nextPopular.name);
}
else if (mostPopular.count == 0)
{
}
}

不过,我在逻辑上搞得一团糟,因为有太多可能的场景可以上演。

最终结果应该是:

  • 在任何特定时刻,购物车中数量最多的两种商品都应该显示为最受欢迎的商品
  • 如果第二个最受欢迎的项目最终数量更大,那么这两个项目应该交换最受欢迎和次受欢迎的位置
  • 当商品从购物车中删除时,流行度也应该更新

最后,如果因为购物车更新而只有一个受欢迎的商品,我应该反映一下。

有人能帮助我如何从逻辑上规划出可能性吗?

我目前正在上离散数学课,但我还不够深入,无法尝试在纸上解决这个问题。我并不是要求为自己编写代码,而是要求提供一些指导,说明如何在逻辑中工作,而不会出现令人超级困惑的if语句。

我最终使用的实现效率不高,但它可以工作。。。

每次从购物车中添加或删除商品时,都会扫描库存,查找最受欢迎商品和第二受欢迎商品的前两个位置。然后,将这些商品与目前最受欢迎和第二受欢迎的持有者进行比较。棘手的部分在于逻辑,因为如果一个项目排在第一位,那么第一位的当前项目需要被推到第二位。然而,如果一个目前排名第二的项目被推到了第一位,那么第一个并列第二位的项目就需要成为第二位。我试图在纸上画出逻辑,但我没有这样做的技能或知识。我最后弄糊涂了

最新更新