代码从C转换为java

时间:2011-11-09 07:10:43

标签: java c

我一直在尝试将此代码从C转换为java但是还没有成功,主要是因为我从来没有学过C. for循环让我感到困惑......

int a=10000,b,c=2800,d,e,f[2801],g;
main(){
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}

我在此网站上看到了代码http://www.cs.uwaterloo.ca/~alopez-o/math-faq/mathtext/node12.html。任何帮助将受到高度赞赏。特别是第二个和第三个for循环没有条件语句,它们应该是。

1 个答案:

答案 0 :(得分:4)

在C中,for循环可能有缺少的子句。

如果您知道这一点并且还知道for是什么:

for ( initialization ; condition ; increase )
{
   code;
}

//is actually

initialization;
while (condition)
{
   increase;
   code;
}

实际上很简单:

for(;b-c;)f[b++]=a/5;

相当于

while (b-c)
{
   f[b++] = a/5;
}

第二个:

for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)

相当于:

while ( d=0, g=c*2 )
{
   //the order in which the following are executed might be different
   c-=14;
   printf("%.4d",e+d/a);
   e=d%a;
}

最后,第三个:

for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);

相当于:

b=c;
while ( d+=f[b]*a, f[b]=d%--g, d/=g--, --b )
{
   D*=b;
}

然而,代码真的真的丑陋,你最好从头开始。

编辑:

进一步的解释 - 对于由逗号分隔的表达式组成的条件,只有与循环相关的最后一个:

while ( a, b, c )
{
}

将循环,直到c被评估为false。但是,ab在每次迭代时执行。因此,如果将c计算为false,则条件语句中的另一个表达式仍然执行,而增量语句中的表达式不是(这可能是此处的意图)。