【问题标题】:Please help me with this simple, elementary pseudocode请帮我解决这个简单的基本伪代码
【发布时间】:2010-12-09 04:03:44
【问题描述】:

这对你们来说应该很容易,但我仍然无法在脑海中形象化。这是我正在尝试做的事情:

if (flag)
    for (i = 0; i < 10; i++)
        {LARGE_BLOCK_OF_CODE (that visits an array in order)}
else
    for (i = 9; i >= 0; i--)
        {LARGE_BLOCK_OF_CODE (that visits an array in REVERSE order)}

问题是这段代码不能放在函数中,我不想复制/粘贴两次。有什么办法可以用这种方式做到这一点:

if (flag)
    loop = for (i = 0; i < 10; i++);
else
    loop = for (i = 9; i >= 0; i--);

loop
{LARGE_BLOCK_OF_CODE (that visits an array in the order specified in 'loop')}

??

【问题讨论】:

  • "这块代码不能放在函数中" 为什么不能呢?

标签: loops for-loop selection if-statement


【解决方案1】:

为循环的开始和结束创建变量,并创建第三个变量来确定迭代的“方向”。

然后让循环运行你的一个代码块。像这样……

int iStart = 0;
int iEnd = 9;
int iIncrement = +1;

if (reverse)
{
    iStart = 9;
    iEnd = 0;
    iIncrement = -1;
}

for (i = iStart; i != iEnd; i += iIncrement)
{
    //...large block of code here...
}

【讨论】:

  • 我的荣幸,“user486800”。 :)
【解决方案2】:

将 LARGE_BLOCK_OF_CODE 放入函数中,接收订单作为参数。然后在您需要的任意数量的循环中重复使用它。

【讨论】:

  • The problem is that this block of code cannot be placed in a function
  • 如果是 C 或 C++ anything 可以放在函数中。唯一的问题是将其放入函数中涉及多少工作。另一种选择:将 LARGE_BLOCK_OF_CODE 放入宏中。
  • 一开始我就是这么想的,但我一开始并没有写那个代码,所以我不想搞砸它,除非在他们分配给我的限制范围内。更何况我大部分都看不懂……>_>
  • @user486800 +1 用于解释约束。
【解决方案3】:

我不知道你的数组有多大。也许可以生成一个额外的数组,以所需的顺序保存所需的索引:

indexes = []

for (i = 0; i < 10; i++)
  indexes.add(i)

if (!flag)
  indexes.reverse()

for each (i in indexes)
  {LARGE_BLOCK_OF_CODE}

【讨论】:

  • 我喜欢它。 FlipScript 的答案对我来说似乎更容易一些,但如果另一个对我不起作用,这是一个不错的备用计划。感谢您的洞察力!
  • 是的。我的第一种方法也类似于 FlipScript。但是他比我快了 2 分钟,所以我把它改成了这个。正如您在他的解决方案中看到的那样,要获得正确的结束条件值有点困难。 (我想两者都相差一个。)但最终它更有效和更直观。另一方面,我帖子中的解决方案已经为一些非常时髦的循环做好了准备。您甚至可以打乱索引数组,从而以随机顺序进行迭代。也许只要有人想这样做,我就会链接到这篇文章。
【解决方案4】:
for (i = flag?0:9; i != flag?10:0; i += flag?1:-1)
{
//LARGE_BLOCK_OF_CODE 
}

好吧,我知道...:p 如果其他的话,那就太多了。

是的,FlipScript 的解决方案更好,虽然它可能看起来不整洁。 :)

【讨论】:

  • 这是 flag = true 时的结果^^。您必须使用 != 而不是 &gt;= 并将 9 替换为 10
  • 我喜欢这个紧凑的版本,但 FlipScript 的精致版本更好地解释了它。谢谢。
  • 我也喜欢这个……但是一两年后,当我不得不重新访问代码并且不记得它是如何工作的时候,它可能会让我头疼。我讨厌不得不研究自己的代码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2014-12-26
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多