从循环内改变循环'i'

时间:2013-12-24 19:02:29

标签: objective-c for-loop

好的,所以我从Java转向Objective-C,继承我的代码(在C中)

#include <stdio.h>
#import <tgmath.h>
#include "header.h"

int main(int argc, const char * argv[]){
    const double seed = 5;
    int newSeed = seed;
    while (newSeed != 1){
        for (int i = sqrt(newSeed); i > 1; --i){
            if (isPrime((double) i)){
                if(newSeed/i == 1){
                    printf("%i", i);
                    newSeed = newSeed/i;
                }
            }
            if(i==1)
            {
                newSeed = 1;
            }
        }
    }
    return 0;
}

我要做的是,改变for循环的第一部分,'int i = sqrt(newSeed)'。所以你可以看到我在for循环中更改了newSeed的值,但它并没有改变循环值的起始值。

我想我正在尝试做的是进入一个新的for循环并突破这一个。即打破这个for循环并用新的

重做它
for (int i = sqrt(newSeed); i > 1; --i)

3 个答案:

答案 0 :(得分:0)

你可以这样做:

    while (newSeed != 1){
        for (int i = sqrt(newSeed); i > 1; --i){
            if (isPrime((double) i)){
                if(newSeed/i == 1){
                    printf("%i", i);
                    newSeed = newSeed/i;
                    i = sqrt(newSeed); /* reassign the value of i */
                }
            }

            if(i==1)
            {
                newSeed = 1;
            }
        }

}

答案 1 :(得分:0)

for (int i = sqrt(newSeed); i > 1; --i){
        if (isPrime((double) i)){
            if(newSeed/i == 1){
                printf("%i", i);
                newSeed = newSeed/i;
            }
        }

如果newseed/i == 1,则分配newseed= newseed/i将始终设置newseed=1

同样for(int i= sqrt(newseed)...表示initial value for i,您现在无法通过更改i来更改newseed,它仅用于初始化。您可能需要change i而不是

表示循环中的i = sqrt(newseed)

可能是你的意思

for (int i = sqrt(newSeed); i > 1; --i){
            if (isPrime((double) i)){
                if(newSeed/i == 1){
                    printf("%i", i);

                }

                else{
                   newSeed = newSeed/i;
                    }
            }

答案 2 :(得分:0)

这是正确的。在第一次分配i = sqrt(newSeed)之后,循环不再访问该分配,它仅使用语句的最后一个--i来更改i的值。 / p>

如果它每次都在循环中调用赋值,i永远不会改变,是吗!

顺便说一句,在Java中也是如此。