【问题标题】:How to find if a number is in an array?如何查找一个数字是否在数组中?
【发布时间】:2014-03-01 01:05:12
【问题描述】:

试图写一个方法来告诉我一个数字是否在一个数组中。到目前为止我有..

    public static boolean inList(double number, double[] list){
    for (double i : list)
        {
            if (i == number){
                return false;
        }

    }
    return true; //if its not in the array I want the if statement to run.
}

到目前为止,这对我不起作用,由于某种原因,它无法识别某些数字何时在数组中。

【问题讨论】:

  • 您确定您的return 语句没有错误吗?如果i == number,肯定number在数组中,那么它应该返回true?
  • 通常你需要知道值的索引,所以如果你找到数字,你可以返回索引,否则返回-1。

标签: java if-statement for-loop methods boolean


【解决方案1】:

比较双打时要考虑的一件事是,它们在表示上并不完全不同。这意味着 1.0 + 2.0 不一定等于 3.0,但可以等于 2.999999.... 或 3.000001。

一个好办法是使用允许有一点松弛(一个 epsilon)的比较,这样可以使您比较的值与您比较的数字有一些(非常接近)距离。

比如:

public static boolean inList(double number, double[] list){
    for (double i : list)
        {
            if (Math.abs(i - number) < 0.0000000001){
                return true;
        }

    }
    return false; //if its not in the array I want the if statement to run.
}

【讨论】:

  • +1 因为这是一个常见问题,例如比较一个双精度数和整数 0。
【解决方案2】:

你需要在你的代码中交换真假。

如果你有相等,那么它在列表中,否则它不在列表中。

另外,一般不要将双精度数 ab== 进行比较。使用

类似:Math.abs(a - b) &lt; EPS,假设是EPS = 0.00001

【讨论】:

    【解决方案3】:

    如果你想用 java 数组做一些严肃的事情,不要错过java.util.Arrays

    在(排序的)数组中查找数字的函数是:

    double[] theArray = {1.24, 5.23, 1.1, 6.466, 35.1, 34.0};
    java.util.Arrays.sort(theArray); //for binarySearch to work
    
    public static boolean inArray(double i, double[] theSortedArray){
         return (java.util.Arrays.binarySearch(i, theSortedArray) >=0);
    }
    

    【讨论】:

    • 从时间复杂度的角度来看,这听起来很糟糕。所以要找到一个值,让我们先排序 O(N logN),然后进行二进制搜索 (O logN)。我不知道,听起来有点矫枉过正。
    • 这取决于您是否想对一组常见的值进行多次搜索(这是一个非常常见的用例)。
    • 对,在这种情况下是的。好的。
    【解决方案4】:

    您混淆了您的 return 声明。应该是这样的:

        public static boolean inList(double number, double[] list){
            for (double i : list)
            {
                if (i == number){
                    //return true when you've found the match!
                    return true;
                }
            }
        //return false here because you finished looking at the entire array 
        //and couldn't find a match.
        return false;
    }
    

    【讨论】:

    • 但是如果找不到数字,我希望它触发 if 语句。我的 if 语句是 if (inList(in,numbersArray))
    • if(!inList(in,numbersArray)) ! 将否定返回的 boolean 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多