我理解一个人在某种情况下具有某些优势的概念,这取决于具体情况但是在每种情况下它们是否可以互换?我的教科书写了
for (init; test; step) {
statements;
}
与
相同init;
while (test) {
statements;
step;
}
如何在for循环中重写以下程序?如果我将以下程序重写为for循环形式,我在设置init和测试的值时遇到问题。
import acm.program.*;
public class DigitSum extends ConsoleProgram{
public void run() {
println("this program sums the digits in an integer");
int n = readInt("enter a positive number: ");
int dsum = 0;
while ( n > 0) {
dsum += n % 10;
n /=10;
}
}
}
答案 0 :(得分:8)
int dsum = 0;
for(int n = readInt("enter a positive number: "); n > 0; n /=10) {
dsum += n % 10;
}
答案 1 :(得分:4)
由于我不能阻止自己写这篇文章,所以我会指出它。
你的for循环: -
for (init; test; step) {
statements;
}
与您发布的while循环不同。 for循环的init
在循环外部不可见,而在while循环中,它将是。因此,它只是在init
循环的for
部分中声明的变量的范围。它就在循环内部。
所以,这是你的for循环的确切转换: -
{
init;
while (test) {
statements;
step;
}
}
就您的具体案件的转换而言,我认为您已经得到了答案。
嗯,通过上面的解释,你的while循环的确切转换与上面的@Eric's
版本略有不同,如下所示: -
int dsum = 0;
int n = 0;
for(n = readInt("enter a positive number: "); n > 0; n /=10) {
dsum += n % 10;
}
请注意,这对@Eric's
答案的修改很少,因为它在for循环之外有循环变量n
的声明。这只是我给出的解释。
答案 2 :(得分:2)
除了在初始值设定项中声明的变量范围之外,还有另一个时间for
将表现出不同的行为,即存在continue
:
for (init; test; update) {
if(sometest) { continue; }
statements;
}
NOT 与
相同init;
while (test) {
if(sometest) { continue; }
statements;
update;
}
因为在while
循环中continue
它会跳过update
,而for
循环则不会。{/ p>
要通过最典型的示例来展示这一点,请考虑以下两个循环(感谢@Cruncher):
// terminates
for(int xa=0; xa<10; xa++) { continue; }
// loops forever
int xa=0;
while(xa<10) { continue; xa++; }
答案 3 :(得分:1)
+1,好问题
两者之间的区别主要是眼睛糖果。在一个例子中,人们可能只是阅读比另一个更好。对于您的示例,以下是单行代码中的for循环等效项。但是,在这种情况下,while循环更容易阅读。
public void run() {
println("this program sums the digits in an integer");
for (n = readInt("enter a positive number: "), dsum=0; n > 0; dsum+=n%10, n/=10);
}
答案 4 :(得分:1)
是的,除了两件事:
“For”让你声明并初始化你的条件(=变量,btw - 多个变量!),然后当你离开“For”循环时它会自动清理。 /> 而使用“While”,你必须自己做,初始化 - 在“While”之外,清理 - 只有当你离开可见性时你的变量(条件)被声明。
“For”具有方便的语法(以及之后的所有清理),用于对集合和数组进行迭代。
你的代码我会用这种方式重写:
import acm.program.*;
public class DigitSum extends ConsoleProgram{
public void run() {
println("this program sums the digits in an integer");
for(int n = readInt("enter a positive number: "), dsum = 0; n > 0; n /=10) {
dsum += n % 10;
}
}
}
不要忘记 - 在init中可以为多个变量进行声明/初始化。
答案 5 :(得分:0)
这应该有效。用此替换while
循环。只需将初始化部分留空即可。
for(;n>0;n=n/10)
{
dsum+=n%10;
}
答案 6 :(得分:0)
无论如何,你有什么样的困难
int n = readInt("enter a positive number: ");
for(n;n>0;n=n/10)
{dsum+=n%10;
}