0
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;
    }

基本上,我有一个双打数组“坐标”。我想写一个方法 index(double dest) 输入一个双精度,找到数组中的哪个索引包含这个双精度并返回索引整数。

在测试时,我 100% 确定我的输入 double 存在于数组中并且在数值上相等。但是,当我运行该方法时,它总是返回 0,或者声明 int 索引的值,似乎 for 循环根本没有运行。

谢谢!

4

3 回答 3

2

由于浮点数(float,double)的表示,基本上你不应该在不使用增量的情况下比较它们,或者请使用 BigDecimal 并从数字的字符串表示构造这些类的实例。

double number1 = 0.11234;
double number2 = 0.11234;
double delta = 0.01;
boolean areEqual = Math.abs(number1 - number2) <= delta;
于 2013-04-02T19:39:41.747 回答
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;
}
于 2013-04-02T19:40:07.643 回答
0

为什么不直接将数组值与输入进行比较?

if (dest == coords[i]) { //...

但是第二个问题是初始化index为 0。在这种情况下,返回值0可能意味着它在索引位置找到,0或者它可能意味着它根本没有找到。-1如果根本找不到,通常会返回。如果在数组中找不到值,则尝试初始化index-1so会返回。-1

如果数组中的值不是不同的,那么您将不会返回匹配的第一个索引,它将是最后一个索引。找到匹配项后,将 abreak放在if匹配项中以跳出for循环。

此外,比较浮点数会带来自己的混乱:请阅读http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

于 2013-04-02T19:38:41.690 回答