在Java中将do-while转换为for循环

时间:2012-07-06 13:37:01

标签: java for-loop do-while

目前,我有这个:

 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不能为null;这使得while循环破坏条件变得多余。当我尝试将此循环转换为for循环时,我从Eclipse中得到了错误的构造错误。

即:

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

虽然,我有工作的while循环,但对我来说似乎是不好的做法。 有什么建议?感谢。

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分: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循环的行为相同(如果在循环之前条件为false,则不会运行)。

答案 2 :(得分: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();
}

答案 3 :(得分:2)

for (boolean start=true;(start || endline != null) && i < y;){
    start=false;
    ObsHandler.obsPartsHandler(); //increment i twice
    ObsHandler.search();
}

(startendline != null)仅在第二次测试 i < y仅在第一时间进行测试。