【问题标题】:How to force the program to always run the first iteration of a while loop?如何强制程序始终运行 while 循环的第一次迭代?
【发布时间】:2011-11-20 04:27:09
【问题描述】:

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

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

为了检查 while 条件是否满足,我创建了一个名为 copy 的对象(与解决方案的类型相同)。此副本是解决方案更新前的解决方案副本。因此,如果解决方案发生变化,则满足 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
}

【问题讨论】:

    标签: java while-loop iteration


    【解决方案1】:

    使用do {} while (condition);

    【讨论】:

    • 谢谢!正是我所需要的。正如 Joachim 所说,我什至不知道 Java 中存在这种结构。
    • @Stephen 阅读我的教科书仍然在我的待办事项清单上。我对 Java 的了解包括我在大学学到的一切以及我自学的一切。但是像这样的案例让我想起了为什么我需要阅读那本教科书。
    【解决方案2】:

    您可以使用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)); 
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-06-19
        • 1970-01-01
        • 2019-06-18
        • 2018-05-14
        • 1970-01-01
        • 1970-01-01
        • 2019-11-16
        • 2015-10-20
        • 1970-01-01
        相关资源
        最近更新 更多