【发布时间】:2012-09-03 00:21:29
【问题描述】:
以下程序确定主要变量。对于大于 1 且小于 p 的所有 d 值返回余数 (p%d) 的值将 isPrime 的值设置为“1”。
- (int)someMethod
{
@autoreleasepool {
int isPrime;
for (int p = 2; p <= 50; ++p) {
isPrime = 1;
for (int d = 2; d < p; ++d) {
if ( p % d == 0)
isPrime = 0;
if ( isPrime != 0)
NSLog (@"%i ", p);
}
}
}
return 0;
}
我的问题是,为什么第一个“for”语句在递增“1”后立即继续,而在第二个“for”语句中,循环继续进行,直到 d 的值不再小于 p 再继续到最后的“if”语句和 NSLog。
如果这个问题不清楚,比如p的值为14,程序如下:
- p 将增加 1 变为 15
- 变量 isPrime 将设置为 1
- d 的值将设置为 2
- p%d 将被计算,
- 结果将不等于 0,因此将跳过 for 语句
- 然后 d 的值将出于某种我不明白的原因增加到 3,并且循环将继续直到 d 等于 15,而不是简单地转到 if 语句和 NSLog,这将显示“15”。为什么第二个“for”循环在“if”语句中继续循环,增加 d,而第一个循环增加一次 p 然后继续?
【问题讨论】:
-
尝试清理帖子的格式。
-
清理代码,更容易修复!
-
您确定输入正确吗?错误放置的支架导致了一个非常严重的错误。内部
for循环的右括号}应该紧跟在if( p % d == 0 ){ isPrime = 0; }之后,而不是在第二个if块之后。
标签: objective-c loops if-statement for-loop