Objective c 从循环内更改循环“i”
好的,我将从Java转移到Objective-C,这是我的C代码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
#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;
}
}