分区不使用数组长度JAVA

时间:2013-11-11 08:11:28

标签: java arrays debugging

我正在尝试将两个数字除以得到一个百分比,然后将其打印出来。这是相关的方法:

public void process_winner(String candidates[], int votes[])
{
   double percent = (mostVotes / votes.length) * 100;
   if (mostVotes > votes.length / 2)
      System.out.println("Winner: " + candidates[mostVotesIndex] + "(" + percent + "%)");
   else
      System.out.println("None (no majority)");
   System.out.println("");
}

问题在于:

double percent = mostVotes / votes.length;

mostVotesint,值为6,votes.length为10.我使用调试器对此进行了验证。

我的百分比变量显示的值为0.0,显示为60.0

5 个答案:

答案 0 :(得分:5)

您需要转换为double,或更改操作顺序。

这样做:

double percent = (mostVotes * 100 ) / votes.length;

答案 1 :(得分:3)

您需要将其强制转换为double,否则它将是整数除法,因此精度将会丢失。

double percent = ((double) mostVotes / votes.length) * 100;

答案 2 :(得分:1)

这是Integer division,按预期工作 如果要在分割整数时获得double值,请使用:

double percent = mostVotes * 1.0 / votes.length;

BTW,为了获得百分比,你需要将它加倍100:

double percent = mostVotes * 100.0 / votes.length;

答案 3 :(得分:1)

将您的公式设为(mostvotes * 100)/votes.length
在您的情况下,执行是:

  • mostVotes/votes.length导致6/10为整数除法
  • 6/10 = 0
  • 0 * 100给出结果0

将其更改为double percent = (mostVotes * 100 ) / votes.length;

执行顺序变为

  • mostVotes * 100,即6 * 100
  • 6 * 100 = 600。
  • 600/votes.length,即600/10 = 60

这应该给你正确的输出

答案 4 :(得分:0)

你需要更改它或“强制转换”为双倍。 你做的是这个

 double percent = (mostVotes / votes.length) * 100;

你认为你在做什么是这样的:

  • (6/10)= 0.6
  • 0.6 * 100 = 60

现在实际发生的是:

  • (6/10)= 0< ---这是因为它是“整数”除法,意味着它不能分割和创建双数据值。它会做什么是将其更改为零,因为整数不能产生十进制数字
  • 因此,0 * 100 =最后给你一个0

在解释你做错了之后知道我会解释什么是正确的,然后向你解释。

  • 你首先“乘以”大多数票数与100 :( MostVotes * 100)现在这将创建一个完整数字;整数。
  • 现在6 * 100 = 600。
  • 然后我们用votes.length划分它,即“10”
  • 然后我们收到60.< ---这是你的答案。

    (mostVotes * 100)/ votes.length

这背后的原因是因为你从来没有真正满足这种计算方式的十进制数。

  1. 你先6 * 100 = 600< ---无小数(不涉及双重)
  2. 然后你做600/10 = 60< ---无小数(不涉及双重)
  3. 你当然可以将大多数投票变成双倍。但这样做只是一种更加便利的方式。

    这更像是一个“算法问题”,而不是一个程序问题。