1

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

每次用户在购物车中添加或删除项目时,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陈述。

4

1 回答 1

1

我最终使用的实现效率不高,但它有效......

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

于 2012-10-08T07:11:22.977 回答