Objective c 从循环内更改循环“i”

Objective c 从循环内更改循环“i”,objective-c,for-loop,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(ne

好的,我将从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;
}
您可以这样做:

    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;
            }
        }

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

还有forint i=sqrtnewseed。。。表示i的初始值,您现在不能通过更改newseed来更改i,它只是用于初始化。你可能想换我

例如,循环中的i=sqrtnewseed

也许你想做的就是

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

                }

                else{
                   newSeed = newSeed/i;
                    }
            }

这是正确的。在第一次赋值i=sqrtnewSeed之后,循环不再访问该赋值,它只使用语句的最后一个-i(在本例中为-i)来更改i的值

如果它在循环中每次都调用分配,我永远不会改变,是吗


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

只需添加break;新种子后=新种子/i;并将ifi==1语句移动到循环的外部。是否要检查素数?
for (int i = sqrt(newSeed); i > 1; --i){
        if (isPrime((double) i)){
            if(newSeed/i == 1){
                printf("%i", i);
                newSeed = newSeed/i;
            }
        }
for (int i = sqrt(newSeed); i > 1; --i){
            if (isPrime((double) i)){
                if(newSeed/i == 1){
                    printf("%i", i);

                }

                else{
                   newSeed = newSeed/i;
                    }
            }