2011-11-09 153 views
0

我一直在試圖把這個代碼從C轉換成java,但是一直沒有成功,主要是因爲我從來沒有學過C。for循環令我困惑不已。從C到java的代碼轉換

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循環在它們應該是的地方沒有條件語句。

+2

C與Java非常相似..你爲什麼不花一些精力去複習一些C原則?如果你已經知道Java,它會花費你不超過一個小時 – Protostome

+1

它似乎訪問'b '在它被初始化之前。 –

+0

Java和C之間的循環非常相似。如果您瞭解Java,那麼您將快速獲取它 – bernie

回答

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被評估爲假。但是,每次迭代都會執行ab。因此,如果c將被評估爲false,條件語句中的另一個表達式仍然執行,而增加語句中的表達式不是(這可能是此處的意圖)。

+1

整數作爲布爾值,在Java中不是這種情況。 (0代表C中的虛假) –

+0

那麼這意味着循環應該看起來像這樣? (d == 0邏輯運算符g == c * 2) { c- = 14; printf(「%。4d」,e + d/a); e = d%a; } –

+0

實際上只有以逗號分隔的最後一個表達式與中斷條件相關。將細節我的答案。 –