Java:计算给出了错误的答案,我的错误在哪里?

Java:计算给出了错误的答案,我的错误在哪里?,java,arrays,Java,Arrays,我似乎不明白为什么打印不正确: public class test3 { public static void main(String[] args) { double[] gens = {100, 200.1, 9.3, 10}; double d0 = 0; double d1 = 0; double d2 = 0; double d3 = 0; double d4 = 0; double d5 = 0; double d6

我似乎不明白为什么打印不正确:

public class test3 {
  public static void main(String[] args) {
    double[] gens = {100, 200.1, 9.3, 10};
    double d0 = 0;
    double d1 = 0;
    double d2 = 0;
    double d3 = 0;
    double d4 = 0;
    double d5 = 0;
    double d6 = 0;
    double d7 = 0;
    double d8 = 0;
    double d9 = 0;
    for (int i = 0; i < gens.length; i++) {
      double percs = gens[i];
      while (percs < -9 || 9 < percs) percs /= 10;
      percs = Math.abs(percs);
      if (percs == 0) {
        d0 += 1;
      }
      else if (percs == 1) {
        d1 += 1;
      }
      else if (percs == 2) {
        d2 += 1;
      }
      else if (percs == 3) {
        d3 += 1;
      }
      else if (percs == 4) {
        d4 += 1;
      }
      else if (percs == 5) {
        d5 += 1;
      }
      else if (percs == 6) {
        d6 += 1;
      }
      else if (percs == 7) {
        d7 += 1;
      }
      else if (percs == 8) {
        d8 += 1;
      }
      else if (percs == 9) {
        d9 += 1;
      }
    }
    double[] pack = {
       d0 /= gens.length,
       d1 /= gens.length,
       d2 /= gens.length,
       d3 /= gens.length,
       d4 /= gens.length,
       d5 /= gens.length,
       d6 /= gens.length,
       d7 /= gens.length,
       d8 /= gens.length,
       d9 /= gens.length
    };
    System.out.println(pack[0]);
    System.out.println(pack[1]);
    System.out.println(pack[2]);
    System.out.println(pack[3]);
    System.out.println(pack[4]);
    System.out.println(pack[5]);
    System.out.println(pack[6]);
    System.out.println(pack[7]);
    System.out.println(pack[8]);
    System.out.println(pack[9]);
  }
}
我知道这是相当重复的,但这正是我现在处理它的方式

不管怎样,基本上,它应该取gens数组中的这四个数字,分别切到每个数字的第一个数字,即1、2、9和1,然后计算0-9之间的每个数字出现的次数,因此“1”应该给出0.5 50%,2应该给出.25%,9应该给出.25%,0-9之间的每一个数字应该给出0。对于数字“1”,我得到了0.5,但是对于每一个数字,我都得到了0,而且我还没有找到我的错误。根据我输入的硬代码,我得到的结果会有所不同,但它们几乎总是错误的

有什么想法吗

谢谢大家!

变化

double percs = gens[i];

如果将其保留为双精度,则while循环

while (percs < -9 || 9 < percs) percs /= 10;
将做同样的事情。

改变

double percs = gens[i];

如果将其保留为双精度,则while循环

while (percs < -9 || 9 < percs) percs /= 10;
将执行相同的操作。

如果在每个阶段打印PERC,您会注意到它们是:

1.0
2.001
0.93
1.0
因此,您的==将不起作用。这是因为你是在除双精度而不是整数。您可以改为使用:

int percs = (int) gens[i];
这将为您提供所需的整数值

如果在每个阶段打印PERC,您会注意到它们是:

1.0
2.001
0.93
1.0
因此,您的==将不起作用。这是因为你是在除双精度而不是整数。您可以改为使用:

int percs = (int) gens[i];

这将为您提供所需的整数值

哦,我总是忘了什么时候不选演员,谢谢你A.R.S和@Ina,我相信你建议的方法也很管用,但我还没有学到很多,所以我现在应该坚持我知道的。@Nate当然,只是想指出还有其他选择:-无论如何,很高兴我能帮忙-别忘了接受答案!哦,我总是忘了什么时候不选演员,谢谢你A.R.S和@Ina,我相信你建议的方法也很管用,但我还没有学到很多,所以我现在应该坚持我知道的。@Nate当然,只是想指出还有其他选择:-无论如何,很高兴我能帮忙-别忘了接受答案!