什么时候循环比while循环更好?

时间:2013-12-09 13:45:59

标签: java loops while-loop do-while

这是一个非常主观的问题,所以我会更具体。有没有时间do-while循环比正常的while循环更好的编码风格?

e.g。

int count = 0;
do {
   System.out.println("Welcome to Java");
   count++;
} while (count < 10);`

在评估do语句(也就是强制do语句至少运行一次)后检查while条件似乎没有意义。

对于像我上面这样简单的例子,我会想:

int count = 0; 
while(count < 10) { 
   System.out.println("Welcome to Java"); count++;
}
通常认为

是以更好的写作风格写成的。

有人能为我提供一个工作示例,说明什么时候将do-while循环视为唯一/最佳选择?你的代码中有do-while循环吗?它起什么作用?你为什么选择do-while循环?

(我很清楚,do-while循环可能会用于编码游戏。如果我错了,请纠正我,游戏开发者!)

12 个答案:

答案 0 :(得分:4)

如果要从网络套接字读取数据直到找到字符序列,首先需要读取数据,然后检查转义序列的数据。

do
{ 
   // read data
} while ( /* data is not escape sequence */ );

答案 1 :(得分:4)

while语句在特定条件为真时继续执行语句块

while (expression) {
     statement(s)
}

do-while在循环的底部计算它的表达式,因此,do块中的语句总是至少执行一次。

do {
     statement(s)
} while (expression);

现在谈谈功能差异,

while-loops由条件分支指令组成,例如if_icmpge或if_icmplt和goto语句。条件指令在循环之后立即将执行分支到指令,因此如果不满足条件则终止循环。循环中的最后一条指令是一个goto,它将字节代码分支回循环的开头,确保字节代码保持循环,直到满足条件分支。

Do-while-loops也非常类似于for循环和while循环,除了它们不需要goto指令,因为条件分支是最后一条指令,并且用于循环回到开头 do-while循环总是至少运行一次循环体 - 它会跳过初始条件检查。由于它会跳过第一次检查,因此一个分支将会减少,而一个分支的条件将减少一个。

通过使用do-while,如果表达式/条件很复杂,则可以获得性能,因为确保循环至少一次。在那种情况下do-while could call for performance gain

非常令人印象深刻的发现, http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html#while_loop

答案 2 :(得分:1)

简单地说,如果您想先检查条件然后执行操作while是更好的选择,如果您想要执行至少一次操作,然后检查条件{{1更好。
根据你的问题,一个工作的例子,
 的 1。当我需要来找到可以在同一个类或超类或超类的超类中声明的do-while等等,即找到位于深层次结构中的字段。 (field A extends B等等)

B extends C

<强> 2。从public Field SearchFieldInHierarchy(Object classObj, String fieldName ) { Field type = null; Class clz = classObj.getClass(); do { try { type = clz.getDeclaredField(fieldName); break; } catch (NoSuchFieldException e) { clz = clz.getSuperclass(); } } while(clz != null || clz != Object.class); return type; } 响应

读取输入流时
Http

答案 3 :(得分:1)

do-while循环基本上是while循环的反转版本。

它第一次无条件地执行循环语句。

然后它再次计算在执行语句之前指定的条件表达式。

int sum = 0;
int i = 0;
do
{
    sum += ids[i];
    i++;
} while (i < 4);

Reference material

答案 4 :(得分:1)

/ * while循环

5块钱

1巧克力= 1美元

while my money is greater than 1 bucks 
  select chocolate
  pay 1 bucks to the shopkeeper
  money = money - 1
end

来到家里,不能去购物,因为我的钱= 0美元 * /

#include<stdio.h>
int main(){
  int money = 5;

  while( money >= 1){   
    printf("inside the shopk and selecting chocolate\n");
    printf("after selecting chocolate paying 1 bucks\n");
    money = money - 1 ;  
    printf("my remaining moeny = %d\n", money);
    printf("\n\n");
  }

  printf("dont have money cant go inside the shop, money = %d",  money);

  return 0;
} 

无限金钱

while( codition ){ // condition will always true ....infinite loop
  statement(s)
}

请访问此视频以便更好地理解 https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s

答案 5 :(得分:0)

如果循环条件只能在循环的第一步之后知道(当您在进入循环之前不想要条件时)。 典型地:

do {
  expr = ...;
while (expr);

答案 6 :(得分:0)

你自己回答这个问题 - 当它需要至少运行一次时,以这种方式阅读是有意义的。

答案 7 :(得分:0)

do - while循环允许您确保在进入迭代之前至少执行一次代码。

答案 8 :(得分:0)

while循环中,在循环中执行代码之前测试条件。在do while循环中,代码在测试条件之前执行,导致代码始终至少执行一次。例如:

$value = 5;

while($value > 10){
    echo "Value is greater than 10";
}

以上内容永远不会输出任何内容。如果我们再次这样做:

$value = 5;

do{
    echo "Value is greater than 10";
}while($value > 10)

它将输出Value is greater than 10,因为在执行循环后测试条件。在此之后它不会输出任何进一步的东西。

答案 9 :(得分:0)

do-while和while之间的区别在于do-while在循环的底部而不是顶部计算它的表达式。因此,do块中的语句总是至少执行一次。

例如,请检查此链接:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

答案 10 :(得分:0)

当您必须重复检查条件并且仅在条件满足时执行循环

时,请使用while语句
while(condition) //eg. a>5
{
Body of Loop
}
  • 如果您在此处看到控制流,您可以看到在执行循环之前检查了条件,如果条件不满足,则循环将不会执行

在Do-While语句中,程序将执行一次循环体,然后检查语句是否为真

do
    {
Body of Loop
}

while(condition); //eg. a>5
  • 如果您在此处注意到控制流程,您将看到正文执行一次,然后检查条件。如果条件为False,程序将退出循环,如果为True,它将继续执行直到条件不满足
  • 需要注意的是,while和do-while只给出相同的输出,控制流程是不同的

答案 11 :(得分:0)

区分两者非常简单。让我们先进行While循环。

while循环的语法如下:

// expression value is available, and its value "matter".
// if true, while block will never be executed.
while(expression) {
    // When inside while block, statements are executed, and
    // expression is again evaluated to check the condition. 
    // If the condition is true, the while block is again iterated
    // else it exists the while block.
}

现在,让我们进行do-while循环。 do-while的语法不同:

// expression value is available but "doesn't matter" before this loop, & the 
// control starts executing the while block.
do {
   // statements are executed, and the
   // statements is evaluated and to check the condition. If true 
   // the while block is iterated, else it exits. 
} while(expression);

下面给出了一个示例程序来使这个概念更清楚:

public class WhileAndDoWhile {

  public static void main(String args[]) {
    int i = 10;
    System.out.println("While");
    while (i >= 1) {
        System.out.println(i);
        i--;
    }
    // Here i is already 0, not >= 1.
    System.out.println("do-while");
    do {
        System.out.println(i);
        i--;
    } while (i >= 1);
  }
}

编译并运行该程序,区别显而易见。