循环次序:如何选择外循环

时间:2014-02-16 12:37:07

标签: java loops for-loop logic

这个问题与编程逻辑有关,而不是编程本身。 我目前正在编写一个包含两个列表的程序;一个用于人(带有人物),另一个用于礼物(书籍,电影等)

简而言之,该计划旨在将所有礼物送到人员名单(包括是否接受礼物的代码。如果是:礼物消失,如果不是:礼物保存给下一个人)。

我的问题如下:我是否通过人员列表(外部循环)然后遍历礼物(内部循环)以确定某人是否想要该特定礼物是否重要?或者我必须先穿过礼物(外部)然后循环通过每个人(内部)以查看是否有人接受了一件礼物?

因此,我必须使用替代(A)或(B)的结构(这里以伪代码提供),我如何知道哪个最好?

(A)

for (list of people) {
    for(list of gifts) {
        //Se if person wants gift
    }
}

(B)

for (list of gifts) {
    for(list of people) {
        //Se if gift is accepted by a person
    }
}

4 个答案:

答案 0 :(得分:0)

只有在某些情况下你break其中一个循环才有意义。在那种情况下,我会将break放在预期会更长的那个上。这个较长的列表将是内部列表(因为如果你break另一个列表是你break整个事件。

答案 1 :(得分:0)

除了其他答案之外,具体做什么“简而言之,该计划旨在将所有礼物送到人员名单(包括是否接受礼物的代码。如果是的话:礼物消失,如果没有:为下一个人保存礼物。)“完全意味着 - 根据给定条件,礼品列表在遍历用户时是否会被修改?如果这是真的,我会将礼物作为外循环遍历,因为在非最坏的情况下,每次删除的礼物都会减少遍历用户列表大小的遍历列表,同时首先遍历用户并在内循环中决定是否申请礼物,无论礼物与否,都会遍历用户列表。

答案 2 :(得分:0)

使用哪种顺序并不重要,或者没有。人是外循环还是没有。礼物是外循环,无论如何,itterations和复杂性将保持不变。

答案 3 :(得分:0)

我不同意大多数答案暗示的原则,即订单不影响绩效。当然,在这样一个非常小的案例中,只有50人和200件礼物,差别可以忽略不计。但考虑一个更极端的情况,有2个人和1,000,000个礼物。

  • 在选项A中,人物变量两次更改值和礼物 变量值变化200万次。变量分配总数1,000,002。
  • 在选项B中,礼物变量的值变化为100万次 人变量值变化200万次。变量分配总数3,000,000。

在两个选项中嵌套循环内部完成相同的计算工作可能是正确的,但管理嵌套循环的计算内容保持不同。即使根据礼物接受度提前摆脱循环可能实现的优化,也可以通过将具有较少值的变量作为外循环来提高性能。