2011-09-13 214 views
3

爲什麼這個代碼總是返回0總是返回零

public int loveCal(String bname, String gname) { 

    char[] boy_name = bname.toLowerCase().toCharArray(); 
    char[] girl_name = gname.toLowerCase().toCharArray(); 

    int boy = 0; 
    int girl = 0; 
    int love = 0; 

    for(int i = 0; i < bname.length(); i++) 
     boy += (int) boy_name[i]; 
    for(int i = 0; i < gname.length(); i++) 
     girl += (int) girl_name[i]; 

    if(boy > girl) 
     love = (girl/boy)*100; 
    else 
     love = (boy/girl)*100; 

    return love; 
} 

回答

5

你總是執行整數算術 - 始終將一個非負整數受到了較大的一個。這將始終爲零。將這個零乘以100不會有幫助。

固定這一點最簡單的方法是隻乘100 第一

return boy > girl ? (girl * 100)/boy : (boy * 100)/girl; 

與整數運算棍棒,而是使它像(600/9)而不是(6/9) * 100避免截斷至零。

+1

+1」用零乘以100不會有幫助。「 – f1sh

5

你可能需要做浮點計算或者只是更改順序,以避免當一切都與整數進行舍入中間結果下降到0。

return 100.0 * girl/boy; // using floating points 

// or maybe just 

return 100 * girl/boy; // using int, but multiplying first 
2

這是因爲這種劃分的:

(girl/boy) 

使用整型,如果這導致斷片的數量,返回INT將爲0 使用浮筒或兩倍來代替。

2

您的部門將始終返回0,因爲股息通常小於除數。它在極少數情況下可能是平等的!

分割之前做乘法:

if(boy > girl) 
    love = (girl * 100)/boy; 
else 
    love = (boy * 100)/girl; 
1

如果:

boy > girl 

則:

girl/boy 

總是返回0因爲整數除法舍入的。試試這個:

100.0f * girl/boy 

這是等效的,但是蒙上girlfloat第一,避免整數四捨五入。 「