首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从循环内部更改循环'i‘

从循环内部更改循环'i‘
EN

Stack Overflow用户
提问于 2013-12-24 19:02:29
回答 3查看 112关注 0票数 0

好的,我要从Java转到Objective,这是我的代码(在C中)

代码语言:javascript
复制
#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 = sqrt(newSeed)‘。因此,您可以看到,我在for循环中更改了newSeed的值,但它并没有更改起始的for循环值。

我想我想要做的是进入一个新的for循环,并突破这个循环。(从这个循环中挣脱出来,用新的

代码语言:javascript
复制
for (int i = sqrt(newSeed); i > 1; --i)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-24 19:06:14

你可以这么做:

代码语言:javascript
复制
    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;
            }
        }

}
票数 0
EN

Stack Overflow用户

发布于 2013-12-24 19:10:11

代码语言:javascript
复制
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,您现在不能通过更改newseed来更改i,它只是用于初始化。你可能想用change i代替

用于循环中的i = sqrt(newseed)

也许你的意思是

代码语言:javascript
复制
for (int i = sqrt(newSeed); i > 1; --i){
            if (isPrime((double) i)){
                if(newSeed/i == 1){
                    printf("%i", i);

                }

                else{
                   newSeed = newSeed/i;
                    }
            }
票数 0
EN

Stack Overflow用户

发布于 2013-12-24 19:10:17

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

如果它在循环中每次调用赋值,i就不会改变,是吗?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20765643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档