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当然,只是想指出还有其他选择:-无论如何,很高兴我能帮忙-别忘了接受答案!