7

我知道while循环可以做for循环可以做的任何事情,但是for循环可以做while循环可以做的任何事情吗?

请举个例子。

4

7 回答 7

15

是的,很容易。

while (cond) S;

for(;cond;) S;
于 2009-10-03T17:41:39.623 回答
2

while循环和经典for循环是可以互换的:

for (initializer; loop-test; counting-expression) {
    …
}

initializer
while (loop-test) {
    …
    counting-expression
}
于 2009-10-03T17:50:46.463 回答
1

如果你有一个固定的界限和步骤,并且不允许修改循环体中的循环变量,那么 for 循环对应于原始递归函数。

从理论上讲,这些比一般的 while 循环弱,例如,您不能仅使用这种 for 循环来计算 Ackermann 函数。

如果您可以在 while 循环中为条件提供上限以使其变为真,则可以将其转换为 for 循环。这表明在实际意义上没有区别,因为你可以很容易地提供一个天文数字的上限,比如说比宇宙的寿命更长。

于 2009-10-03T21:15:37.890 回答
1

使用 C

问题的基本前提是while循环可以重写为for循环。如

init;
while (conditional) {
  statement;
  modify;
}

被改写为;

for ( init; conditional; modify ) {
  statements;
}

问题是基于initandmodify语句被移动for循环中,而for循环不仅仅是

init;
for (; conditional; ) {
  modify;
}

但是,这是一个技巧问题。这是不正确的,因为statements;可以包括内部流量控制。从C Programming: A Modern Approach, 2nd Edition你可以在第 119 页看到一个例子,

n = 0;
sum = 0;
while ( n < 10 ) {
  scanf("%d", &i);
  if ( i == 0 )
    continue;
  sum += i;
  n++;
}

这不能像for循环一样重写,

sum = 0;
for (n = 0; n < 10; n++ ) {
  scanf("%d", &i);
  if ( i == 0 )
    continue;
  sum += i;
}

为什么因为“当i等于 时0,原始循环不会增加n,但新循环会增加。

这基本上归结为捕获,

循环内的显式流控制while允许执行for循环(带有内部init;modify;语句)无法重新创建。

于 2018-07-24T20:53:29.247 回答
0

当循环迭代次数未知时,while 循环可能更有帮助,而当循环迭代次数已知时,for 循环更有效。考虑以下学生分数的代码片段,但学生人数未知

ArrayList studentMarks = new ArrayList();

    int score = 100;
    int arraySize = 0;
    int total = 0;
    System.out.println("Enter student marks, when done press any number less than 0 0r greater than 100 to terminate entrancies\n");
    
    while(score >= 0 && score < 101) {
        System.out.print("Enter mark : ");
        
        score = scan.nextInt();
        if(score < 0 | score > 100)
            break;
        studentMarks.add(score);
        arraySize += 1;
        

        
    }
    // calculating total, average, maximum and the minimum values
    

    
    
    for(int i=0;i<studentMarks.size();i++) {
        total += studentMarks.get(i);
    System.out.println("Element at [" + (i+1)+"] : " +studentMarks.get(i)); 
        
    }
    
    System.out.println("Sum of list element is : " + total);
    System.out.println("The average of the array list : " + (total/(studentMarks.size())));
    Collections.sort(studentMarks);
    System.out.println("The minimum of the element in the list is : " + studentMarks.get(0));
    System.out.println("The maximum of the element in the list is : " + studentMarks.get(studentMarks.size()-1));
    
    scan.close();
于 2021-06-13T21:32:58.967 回答
-1

在类 C 语言中,您可以声明 for 循环,如下所示:

for(; true;)
{
    if(someCondition)
       break;
}

for更严格的语言中,无限循环将是需要while循环的情况。

于 2009-10-03T17:42:58.950 回答
-1

While loop没有for loophas 那么多的灵活性,for 循环比 while 循环更具可读性。我会用一个例子来证明我的观点。for 循环可以有如下形式:

for(int i = 0, j = 0; i <= 10; i++, j++){
// Perform your operations here.
}

不能像上面的 for 循环那样使用 while 循环,今天大多数现代语言也允许使用for each loop

在我看来,我可能会有偏见,请原谅,while loop只要可以用for loop.

于 2012-09-27T12:52:57.650 回答