比较数组中的double和返回索引号

时间:2013-04-02 19:34:28

标签: java arrays double equality

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循环根本不运行。

谢谢!

3 个答案:

答案 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