好的,所以我从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)
答案 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中也是如此。