我试图确定用户购物车中最受欢迎的两个项目。
每次用户向购物车添加或从购物车中删除项目时,都会调用一个函数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语句。

最佳答案

我最终使用的实现效率不高,但它可以工作…
每次从购物车中添加或删除项目时,都会扫描库存,查找最受欢迎项目和第二受欢迎项目的前两个匹配项。然后,将这些项目与目前最受欢迎和次受欢迎的项目进行比较。最棘手的部分是逻辑,因为如果一个项出现在第一位,那么第一位的当前项需要被推到第二位。然而,如果一个项目,目前是第二个撞到了第一,那么第一个项目已被捆绑为第二需要成为第二。我试图在纸上画出逻辑图,但我只是没有技能或知识去做我最后弄糊涂了:)

关于algorithm - 作业:确定购物车中两个最受欢迎商品的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12764692/

10-10 09:24