如何强制程序始终运行while循环的第一次迭代?

6

我正在编写一个程序来实现我在文献中发现的算法。在这个算法中,我需要一个while循环。

while(solution has changed){
    updateSolution();
}

为了检查while条件是否满足,我创建了一个对象(与solution相同类型的对象)叫做copy。在更新solution之前,将其复制到copy中。因此,如果solution发生变化,则while循环中的条件得到满足。
然而,我在执行while循环时遇到了一些问题,因为我从一个空的解决方案(结果集)开始,并且在那时copy也是空的(两者都使用类的构造函数调用)。这意味着当执行while循环时,两个对象相等,因此while循环中的所有语句都不会被执行。
我的解决方法是在while循环之前创建一个虚拟变量,并将其设置为true,在其中将其设置为false。我怀疑这不是最好的解决方案,所以我想知道是否有标准解决方案来解决这个问题(强制程序始终运行while循环的第一次迭代的某种方法)?
现在的代码如下:
SolutionSet solution = new SolutionSet();
SolutionSet copy = new SolutionSet();
boolean dummy = true;

while((!solution.equals(copy)) || dummy){
   dummy = false;
   copy = solution.copy();
   solution.update() // here some tests are done and one object may be added to solution
}
3个回答

12

使用do {} while (condition);


谢谢!确实是我需要的东西。正如Joachim所提到的,我甚至不知道Java中存在这种结构。 - Maza89
@Stephen,我还没来得及看完那本教材。我的Java知识包括我在大学里学到的和自学的所有内容。但是像这种情况提醒我为什么需要读那本教材。 - Maza89

1
你可以使用 do-while 语句来实现:
SolutionSet solution = new SolutionSet();
SolutionSet copy = new SolutionSet();

do {
   copy = solution.copy();
   solution.update() // here some tests are done and one object may be added to solution
} while (!solution.equals(copy)); 

1

While用于测试条件,如果为真,则运行指定的代码。

有一种结构略有不同:Do... While。它执行一些代码,并在块的末尾检查是否满足某些条件。例如:

do {
   this;
   that;
   that another;
} while (this == true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接