好的,我要从Java转到Objective,这是我的代码(在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 = sqrt(newSeed)‘。因此,您可以看到,我在for循环中更改了newSeed的值,但它并没有更改起始的for循环值。
我想我想要做的是进入一个新的for循环,并突破这个循环。(从这个循环中挣脱出来,用新的
for (int i = sqrt(newSeed); i > 1; --i)发布于 2013-12-24 19:06:14
你可以这么做:
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;
}
}
}发布于 2013-12-24 19:10:11
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)。
也许你的意思是
for (int i = sqrt(newSeed); i > 1; --i){
if (isPrime((double) i)){
if(newSeed/i == 1){
printf("%i", i);
}
else{
newSeed = newSeed/i;
}
}发布于 2013-12-24 19:10:17
这是正确的。在第一个赋值i = sqrt(newSeed)之后,循环不再访问该赋值,它只使用语句的最后一个--i (在本例中为--i)来更改i的值。
如果它在循环中每次调用赋值,i就不会改变,是吗?
顺便说一句,Java也是如此。
https://stackoverflow.com/questions/20765643
复制相似问题