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

4 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
Run Code Online (Sandbox Code Playgroud)

通过这个循环和我的输入,endline不能为null; 这使得while循环破坏条件变得多余.当我尝试将此循环转换为for循环时,我从Eclipse中得到了错误的构造错误.

即:

for (i < y) {
       ObsHandler.obsPartsHandler(); //increment i twice
       ObsHandler.search(); }
Run Code Online (Sandbox Code Playgroud)

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

mel*_*okb 6

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

for ( ; i < y && !endline.equals(null); ) {
    ObsHandler.obsPartsHandler();
    ObsHandler.search();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我喜欢整个声明,除了"while或do更适合".虽然循环被设计用于等待逻辑条件.For循环专门针对"我想要运行x次"的特定逻辑条件.约定可以被破坏,也可以用作其中任何一个,但如果你确切地知道执行了多少次,那么for循环优于while循环,特别是你概述的原因,即你的索引变量可以是init' d与for循环,从而限制其范围. (2认同)
  • @SeanKenny令人不悦的是使用`i`作为变量,在这样的多种方法中被改变.它不仅使调试变得困难,因为除了简单的for循环之外,`i`是一个可怕的变量名,但它也会混淆任何试图用于循环的人.如果他们在代码中的其他地方意外地进行了for循环,那就去`for(i = 0; i <...`并获取`int`(这发生在白天/晚上......)那么这就是一个bug这可能会在很长一段时间内未被发现. (2认同)

ass*_*ias 6

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

while (i < y) {    
    ObsHandler.obsPartsHandler(); //increment i twice
    ObsHandler.search(); 
}
Run Code Online (Sandbox Code Playgroud)

如果你还需要检查endLine:

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

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

  • 这个循环确实是正确的形式.但我强烈建议将"i"和"y"改为更有意义的东西. (2认同)