-2

有谁知道这段代码有什么问题?

int squareOf = 1500;
int squarer = 1;

    for(int i = 0;i <= squareOf; i++){

        for(;squarer <= i; squarer++){

            if(i / squarer == 0){
                NSLog(@"%i",i);
            }
        }

它没有给我任何错误,只是它没有输出任何东西。有谁知道为什么?对不起,如果它很明显,我对编程很陌生。

4

2 回答 2

1

这一行:

if(i / squarer == 0)

它从来没有被调用过,把日志放在代码周围,你就会明白:

for(int i = 0;i <= squareOf; i++){

        for(;squarer <= i; squarer++){
            NSLog(@"%d - %d", i, squarer)
            if(i / squarer == 0){
                NSLog(@"%i",i);
            }
        }
于 2013-09-25T15:09:31.000 回答
0

在第一次迭代期间,内部循环没有开始,因为squarer是 1,并且i是 0,所以永远不会满足 for 条件。

在第二次迭代期间,内部循环执行一次,因为iis 1 并且 also squareris 1. i/squareris 1 所以它不打印任何东西。

在第三个循环期间squarer已经是 2(在前一个循环中增加),i是 2,所以循环执行一次,然后又i/squarer是 1。

您可以轻松想象在所有其他循环中会发生什么:i总是等于squareri/squarer总是 1。为此目的使用两个嵌套循环是完全没有用的,请参见以下代码:

int squareOf = 1500;
int squarer = 1;
for(int i=1; i<=squareOf; i++) {
    if(i / squarer == 0)
        NSLog(@"%i",i);
    else
        NSLog(@"i/squarer is not zero");
}

它是等价的,i/squarer永远不会为零,为了清楚起见,我添加了一条日志语句。现在你明白为什么i/squarer总是1了吗?如果您打算编写不同的代码,请告诉我您要实现的目标,我可以尝试更正代码。

于 2013-09-25T15:22:11.553 回答