簡體   English   中英

如何強制程序始終運行while循環的第一次迭代?

[英]How to force the program to always run the first iteration of a while loop?

我正在編寫一個程序來實現我在文獻中找到的算法。 在這個算法中,我需要一個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
}

使用do {} while (condition);

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

While測試條件時,如果是,則運行指定的代碼。

有一種結構有點不同: Do... While 它執行一些代碼,並在塊結束時檢查是否滿足某些條件。 例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM