2011-09-19 35 views
6

我正在编写一个程序来实现我在文献中找到的算法。 在这个算法中,我需要一个while循环;如何强制程序始终运行while循环的第一次迭代?

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

检查while条件是否满足,我创建了一个名为copy的Object(与解决方案相同)。此副本是更新解决方案之前的解决方案的副本。所以如果解决方案发生了变化,while循环中的条件就会得到满足。

不过,我有一些问题,找到两个对象作为while循环的条件下,最好的解决方案被执行,因为我开始用空的解决方案(结果集)和副本也是在那个时候空(均称为与类的构造函数)。这意味着当执行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 
} 

回答

12

使用do {} while (condition);

+0

哦,好''''''''while'。所以很少使用,所以很少知道它... –

+0

谢谢!确切地说,我确实需要什么。正如Joachim所说,我甚至不知道Java中存在这种构造。 – Maza89

+0

@ 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); 
相关问题