首页 > 解决方案 > 接受两个双精度数组作为参数的方法,仅当数组中的所有值都相等时才返回 true(在 .001 阈值内)

问题描述

我不是最好的,但这就是我目前所拥有的。每当我更改 中的任何元素时array1,即使它高于.001阈值,它仍然适用。我哪里做错了?

public static boolean equals(double[] arr1, double[] arr2) {
    if (arr1.length != arr2.length)
        return false;

    for (int i = 0; i < arr1.length; ++i) {
        if ((arr1[i] - arr2[i]) < .001) {
            return true;
        }
    }

    return false;
}

public static void main(String[] args) {
    question2 object = new question2();
    double[] arr1 = { 95.0, 14.0, 16.5, 11.1 };
    double[] arr2 = { 95.0, 12.9, 16.5, 11.1 };
    System.out.println(question3.equals(arr1, arr2));

标签: java

解决方案


如果any值差小于0.001错误,则返回 true,因为您应该比较所有这些值

其次,您需要比较Absolute值以检查阈值,因为在某些情况下,值2nd array可能大于 1,因此会破坏条件,因此请尝试以下操作:

public static boolean equals(double[] arr1, double[] arr2) {
    if (arr1.length != arr2.length)
        return false;

    for (int i = 0; i < arr1.length; ++i) {
        if (Math.abs(arr1[i] - arr2[i]) >= .001) {  // <-- Note Absolute difference
            return false;   //here if any value voilates the rule it should return false
        }
    }

    return true;
}

推荐阅读