1

ユーザーのショッピングカートで最も人気のある2つのアイテムを特定しようとしています。

ユーザーがカートにアイテムを追加またはカートからアイテムを削除するたびに、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)
    {
    }
   }

実行できるシナリオが非常に多いため、ロジックにすべてが混乱しています。

最終結果は次のようになります。

  • いつでも、ショッピングカート内の数量が最も多い2つのアイテムが最も人気があるように表示されます。
  • 2番目に人気のあるアイテムの数量が多くなった場合、2つのアイテムは、最も人気のあるアイテムと次に人気のあるアイテムの位置を入れ替える必要があります。
  • カートからアイテムが削除されると、人気も更新する必要があります。

最後に、カートの更新のために人気のあるアイテムが1つしかない場合は、それを反映する必要があります。

誰かが可能性を論理的に計画する方法を手伝ってくれますか?

私は現在離散数学のクラスを受講していますが、これを紙で解決するのに十分な距離ではありません。私はコードを書き出すことを求めているのではなく、非常に混乱するifようなステートメントの混乱なしに、ロジックをどのように処理するかについてのガイダンスにすぎません。

4

1 に答える 1

1

私が使用することになった実装は効率的ではありませんが、機能します...

アイテムがカートに追加またはカートから削除されるたびに、在庫がスキャンされ、最も人気のあるアイテムと2番目に人気のあるアイテムの最初の2つの出現が検出されます。次に、それらのアイテムは、最も人気があり、2番目に人気のある現在の保有者と比較されます。トリッキーな部分はロジックにありました。アイテムが最初に配置された場合、最初の現在のアイテムを2番目にプッシュする必要があるためです。ただし、現在2番目にあるアイテムが最初にぶつかった場合、2番目にタイされた最初のアイテムが2番目になる必要があります。私は紙に論理を描き出そうとしていましたが、それを行うためのスキルや知識がありません。混乱してしまいます。:)

于 2012-10-08T07:11:22.977 に答える