public int index(double dest){
int index = 0;
for(int i=0; i<coords.length; i++){
if((dest-coords[i])<1 && (dest-coords[i])>-1){
index = i;
}
}
return index;
}
基本上,我有一个双打阵列“coords”。我想写一个方法索引(双目的地),它输入一个double,找到数组中的哪个索引包含这个double并返回索引整数。
在测试时,我100%确定我的输入double在数组中是存在的并且在数值上是相等的。但是,当我运行该方法时,它总是返回0,或者声明int索引的值,似乎for循环根本不运行。
谢谢!
答案 0 :(得分:2)
由于浮动数字(浮点数,双数)的表示基本上你不应该在不使用增量的情况下比较它们,或者请使用BigDecimal代替并从数字的字符串表示构造那些类的实例。
double number1 = 0.11234;
double number2 = 0.11234;
double delta = 0.01;
boolean areEqual = Math.abs(number1 - number2) <= delta;
答案 1 :(得分:1)
public int index(double destination){
int index = 0;
for(int i=0; i<coords.length; i++){
if((dest-coordsX[i])<1 && (destX-coordsX[i])>-1){
index = i; // This gets overwritten as there is no break statement
break; // Break out of the loop, the first time this becomes true
}
}
return index;
}
答案 2 :(得分:0)
为什么不直接将数组值与输入进行比较?
if (dest == coords[i]) { //...
但是第二个问题是将index
初始化为0.在这种情况下,返回值0
可能意味着它在索引位置0
处找到,或者它可能意味着它不是'发现了。如果根本找不到-1
,通常会返回index
。尝试将-1
初始化为-1
,以便在数组中找不到值时返回break
。
如果数组中的值不是不同的,那么您将不会返回匹配的第一个索引,它将是最后一个索引。在if
内放置一个for
进行匹配,以便在找到匹配后突破{{1}}循环。
此外,比较浮点数会带来自己的混乱:请阅读http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm