【问题标题】:Logic help, possibly regarding loops [closed]逻辑帮助,可能与循环有关[关闭]
【发布时间】:2013-06-20 10:39:21
【问题描述】:

例如,我有一个项目列表,比如说:

  1. 苹果
  2. 奥兰治
  3. 香蕉
  4. 甜瓜
  5. 木瓜

现在我的显示器上限制为 3 个项目。所以说,如果我想显示Papaya,那么它必须在第 2 个插槽,而 Melon 应该在第 1 个插槽,因为限制为 3。

+---+---------+---------+
| 1 | Apple   | Melon   |
| 2 | Orange  | Papaya  |
| 3 | Banana  |         |
+-----------------------+

现在我无法将其转换为代码。例如,如果我想获得Banana 应该是什么插槽,我应该能够获得3。如果我想知道Melon 应该是什么插槽,我会得到1。谁能帮我吗?我需要做什么才能将这个想法转换为代码形式。

【问题讨论】:

  • 我对 vb.net 不够熟悉,无法写出实际答案,但它会涉及到 modulo operation

标签: .net vb.net loops logic


【解决方案1】:

如果你的数组和槽都是从零开始的,你可以通过简单的计算得到槽:

slot = arrayindex mod numslots

如果您的数组是基于 1 的,但您只需在模运算前减去 1 即可解决此问题:

slot = (arrayindex - 1) mod numslots

而且,如果您的 slots 是基于 1 的,那么在上述两种情况下,只需将 1 添加到 slot

slot = (arrayindex mod numslots) + 1
slot = ((arrayindex - 1) mod numslots) + 1

因此,例如,让我们假设从 1 开始的数组和从 0 开始的槽(其中三个,0 到 2),木瓜的索引为 5。使用:

slot = (arrayindex - 1) mod numslots
slot = (    5      - 1) mod    3
slot =          4       mod    3
slot =                 1

因此它将进入第二个插槽。

【讨论】:

  • 感谢您的深入解释,效果很好。我很遗憾没有在数学课上花太多注意力。
【解决方案2】:

在伪代码中

column = 0
row = item_number
while row > max_rows
    row = row - max_rows
    column = column + 1

运行后,行和列将设置为正确的(基于 0)的位置。您可以使用 mod 运算符更有效地实现。

【讨论】:

    【解决方案3】:

    如何使用 MOD 运算符 (http://msdn.microsoft.com/en-us/library/se0w9esz(v=vs.80).aspx) 进行模运算

    slot = (index_of_item MOD items_on_display) + 1
    

    【讨论】:

      【解决方案4】:
      for(int k=0; k<totalFruits; k++)
      {
       for(i=1; i<4; i++)
       {
        fruitNumber = i;
       }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-11-04
        • 2010-10-02
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 2023-02-19
        • 1970-01-01
        相关资源
        最近更新 更多