我似乎无法弄清楚为什么它打印不正确:
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到0的次数-9出现了,所以&#39; 1&#39;应该给0.5(50%),2应该给.25(25%),9应该给.25(25%),其中0-9的每个其他数字应该给0.我得到0.5的数字&#39; 1& #39;,但是对于其他每一个都是0,我还没有找到我的错误。我得到的结果取决于我输入的数字(硬编码),但它们几乎总是错误的。
有什么想法吗?
谢谢!
答案 0 :(得分:5)
更改
double percs = gens[i];
到
int percs = (int)gens[i];
如果你把它留作双重,你的while循环
while (percs < -9 || 9 < percs) percs /= 10;
不会正确地切除除第一个以外的所有数字,因为它将执行正常除法而不是整数除法。如果在while循环后打印percs
,则可以看到此信息。
我还想指出,这可以更轻松地完成很多。例如:
double[] gens = {100, 200.1, 9.3, 10};
int[] count = new int[10];
for (double d : gens)
count[("" + Math.abs(d)).charAt(0) - '0']++;
for (int n : count)
System.out.println((double)n / gens.length);
会做同样的事情。
答案 1 :(得分:1)
如果您在每个阶段打印percs
,您会发现它们是:
1.0
2.001
0.93
1.0
所以你的==不行。这是因为你正在划分双打而不是整数。您可以改为使用:
int percs = (int) gens[i];
这将为您提供所需的整数值。