4

目前,我有这个:

 do{
           if (i < y){ //y is a constant

               ObsHandler.obsPartsHandler(); //increment i twice
               ObsHandler.search(); 

           }
           else { 
               break;
           }

       } while (!endline.equals(null)); // endline is changed during each loop cycle

有了这个循环和我的输入,endline 不能为空;这使得 while 循环中断条件变得多余。当我尝试将此循环转换为 for 循环时,我从 Eclipse 中得到一个错误的构造错误。

IE:

for (i < y) {
       ObsHandler.obsPartsHandler(); //increment i twice
       ObsHandler.search(); }

虽然,我的 while 循环有效,但对我来说这似乎是一种不好的做法。有什么建议么?谢谢。

4

4 回答 4

6

如果您不需要检查endLine,您仍然可以使用 while 循环:

while (i < y) {    
    ObsHandler.obsPartsHandler(); //increment i twice
    ObsHandler.search(); 
}

如果您还需要检查endLine

while (i < y && !endline.equals(null)) {    
    ObsHandler.obsPartsHandler(); //increment i twice
    ObsHandler.search(); 
}

注意:do / while(您的初始代码)和 while { } 之间的区别在于,在第一种情况下,循环始终至少运行一次。使用 while { },如果一开始条件不成立,则根本不会运行。这与 for 循环的行为相同(如果在循环之前条件为假,则不会运行)。

于 2012-07-06T13:41:28.157 回答
6

如果要使用for循环,则需要具有标准的所有三个部分for。由于您有两个条件,因此它们都需要包含在条件部分中:

for ( ; i < y && !endline.equals(null); ) {
    ObsHandler.obsPartsHandler();
    ObsHandler.search();
}

您可能有一些 的初始化代码i,例如i=0,它们也可以进入for循环的初始化部分。否则,如果您所拥有的只是一组要检查的条件,而没有您正在迭代的某个数组或列表,while或者do确实更合适。

于 2012-07-06T13:39:24.413 回答
2
for (boolean start=true;(start || endline != null) && i < y;){
    start=false;
    ObsHandler.obsPartsHandler(); //increment i twice
    ObsHandler.search();
}

(startendline != null)只测试了第二次。
i < y只是第一次测试。

于 2012-07-06T13:44:23.733 回答
2

while循环似乎是您的代码的自然选择。我只是将其简化为:

do {
  ObsHandler.obsPartsHandler(); //increment i twice
  ObsHandler.search(); 
} while (i < y && !endline.equals(null)); // endline is changed during each loop cycle

或者,如果您需要在之前检查条件:

while (i < y && !endline.equals(null)) {
  ObsHandler.obsPartsHandler(); //increment i twice
  ObsHandler.search();
}
于 2012-07-06T13:42:21.637 回答