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



我不是最好的,但这是我迄今为止所拥有的。每当我更改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));

目前,如果任何数组元素在 0.001 范围内,此脚本将返回 true。 你需要颠倒你的逻辑/思维。 如果任何数组元素不在 0.001 范围内,则要返回 false。

还要考虑数组 2 是否大于数组 1。在这种情况下,它们的差异将是负数。您可能想取差值的绝对值,看看 THAT 是否小于 0.001。

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

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

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

替换

if ((arr1[i] - arr2[i]) < .001) 

if (Math.abs(arr1[i] - arr2[i]) < .001)

我认为你的逻辑有问题。你应该写这样的代码

布尔测试 = 真;

for (int i = 0; i < arr1.length; ++i) {
if (Math.abs((arr1[i] - arr2[i])) > .001) {
test = false;
break;
}
}
return test;

原因是,代码正在检查数组中第一次出现 true 场景,并且返回为 True。

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;
}
}
// Code flow will come to false return statement, only if, the 'if' condition doesn't match for all the comparison.
return false;
}
double[] arr1 = { 95.0, 14.0, 16.5, 11.1 };
double[] arr2 = { 95.0, 12.9, 16.5, 11.1 };
// Will return True on first occurrence (95.0-95.0 < .001) and the code flow goes back to the function call and print as True.

检查以下解决方案:

public static boolean equals(double[] arr1, double[] arr2) {
if (arr1.length != arr2.length)
return false;
boolean flag = false;
for (int i = 0; i < arr1.length; ++i) {
if (arr1[i] - arr2[i] < .001) {
flag = true;
} else {
flag = false;
break;
}
}
return flag;
}

相关内容

最新更新