永远回归零

时间:2011-09-13 08:26:53

标签: java

为什么此代码始终返回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 个答案:

答案 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并避免整数舍入。