我知道while循环可以做for循环可以做的任何事情,但是for循环可以做while循环可以做的任何事情吗?
请举个例子。
我知道while循环可以做for循环可以做的任何事情,但是for循环可以做while循环可以做的任何事情吗?
请举个例子。
是的,很容易。
while (cond) S;
for(;cond;) S;
while
循环和经典for
循环是可以互换的:
for (initializer; loop-test; counting-expression) {
…
}
initializer
while (loop-test) {
…
counting-expression
}
如果你有一个固定的界限和步骤,并且不允许修改循环体中的循环变量,那么 for 循环对应于原始递归函数。
从理论上讲,这些比一般的 while 循环弱,例如,您不能仅使用这种 for 循环来计算 Ackermann 函数。
如果您可以在 while 循环中为条件提供上限以使其变为真,则可以将其转换为 for 循环。这表明在实际意义上没有区别,因为你可以很容易地提供一个天文数字的上限,比如说比宇宙的寿命更长。
问题的基本前提是while
循环可以重写为for
循环。如
init;
while (conditional) {
statement;
modify;
}
被改写为;
for ( init; conditional; modify ) {
statements;
}
问题是基于init
andmodify
语句被移动到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;
语句)无法重新创建。
当循环迭代次数未知时,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();
在类 C 语言中,您可以声明 for 循环,如下所示:
for(; true;)
{
if(someCondition)
break;
}
在for
更严格的语言中,无限循环将是需要while
循环的情况。
While loop
没有for loop
has 那么多的灵活性,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
.