为什么此代码始终返回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;
}
答案 0 :(得分:5)
您可能需要进行浮点计算,或者只是更改顺序,以避免在使用整数完成所有操作时将中间结果舍入为0。
return 100.0 * girl / boy; // using floating points
// or maybe just
return 100 * girl / boy; // using int, but multiplying first
答案 1 :(得分:5)
您始终执行整数算术 - 并始终将一个非负整数除以更大的一个。这总是给零。将零乘以100无济于事。
解决此问题的最简单方法是先乘以100 :
return boy > girl ? (girl * 100) / boy : (boy * 100) / girl;
坚持使用整数运算,但通过使其类似(600 / 9)
而不是(6 / 9) * 100
来避免截断为零。
答案 2 :(得分:2)
这是因为这种分裂:
(girl/boy)
使用int,如果这导致一个小数,则返回的int将为0。 使用浮点数或双倍。
答案 3 :(得分:2)
由于红利通常小于除数,因此您的除法将始终返回0。在极少数情况下,它可能是平等的!
在除法之前进行乘法运算:
if( boy > girl )
love = (girl * 100) / boy;
else
love = (boy * 100) / girl;
答案 4 :(得分:1)
如果:
boy > girl
然后:
girl/boy
由于整数除法舍入,始终返回0
。试试这个:
100.0f * girl / boy
这是等效的,但首先将girl
强制转换为float
并避免整数舍入。