java - 比较两个双精度数组,然后打印差异数 + 最大差异
问题描述
我有两个具有双值的数组。
double[] testArray1 = {3.3, 2.7, 6.4, 1.8, 9.5, 1.4, 9.0, 7.0, 6.5, 3.7};
double[] testArray2 = {5.6, 4.7, 2.8, 3.7, 5.8, 2.7, 6.4, 1.8, 9.5,10.2};
我需要比较这些值,然后打印差异数量以及最大差异。到目前为止,我已经做到了;
double nDiff = 0;
double BiggestDiff = 0;
double currentDiff = 0;
for (int i = 0; i < testArray1.length; i++){
for (int k = 0; k < testArray1[i].length; k++){
if (testArray1[i][k] != testArray2[i][k]) {
nDiff +=;
currentDiff = 0;
if (testArray1[i][k] > testArray2[i][k]) {
nDiff = (testArray1[i][k] - testArray2[i][k]);
}
else {
currentDiff = (testArray2[i][k] - testArray1[i][k]);
}
if (currentDiff > BiggestDiff) {
BiggestDiff = currentDiff;
}
}
}
}
if (nDiff > 0) {
System.out.println("Number of differences was " + nDiff);
System.out.println("The biggest difference was " + BiggestDiff);
}
首先,我得到一个非法的表达式开始错误,它指向; 在nDiff +=;
. 所以我删除它只是为了得到几个错误,告诉我不能取消引用 double并且需要数组,但是找到了 double,这让我认为我已经完全错误地完成了代码。
提前致谢。
解决方案
首先:
for (int k = 0; k < testArray1[i].length; k++){
是错误的。当您调用 testArray1[i] 时,它返回双精度数而不是数组,您无法获取单双精度数的长度属性。下一步:
testArray1[i][k] != testArray2[i][k]
这些数组不是矩阵,所以你不能像 [][] 这样的双括号,如果你想从数组中获取元素,它应该只是 testArray[i]。nDiff += ; 加上什么?你必须在 += 之后放一些东西
nDiff += k;
您想比较第一个元素与第一个元素、2v2、3v3 等吗?还是第一个数组中的每个元素与第二个数组中的每个元素?
如果每个 x ,那么你的代码应该是这样的:
double[] testArray1 = {3.3, 2.7, 6.4, 1.8, 9.5, 1.4, 9.0, 7.0, 6.5, 3.7};
double[] testArray2 = {5.6, 4.7, 2.8, 3.7, 5.8, 2.7, 6.4, 1.8, 9.5, 10.2};
double biggestDifference = 0;
double differenceCounter = 0;
double currentDifference;
double firstArrayValue;
double secondArrayValue;
for (int i = 0; i < testArray1.length; i++){
for (int k = 0; k < testArray1.length; k++){
firstArrayValue = testArray1[i];
secondArrayValue = testArray2[k];
if (firstArrayValue != secondArrayValue) {
differenceCounter += 1;
currentDifference = Math.abs(firstArrayValue - secondArrayValue);
if (currentDifference > biggestDifference) {
biggestDifference = currentDifference;
}
}
}
}
if (differenceCounter > 0) {
System.out.println("Number of differences was " + differenceCounter);
System.out.println("The biggest difference was " + biggestDifference);
}
然后它将打印:
Number of differences was 95.0
The biggest difference was 8.799999999999999
如果您想比较 1v1、2v2、3v3 等,您可以假设两个数组的长度相同,那么您应该使用一个索引,例如:
double[] testArray1 = {3.3, 2.7, 6.4, 1.8, 9.5, 1.4, 9.0, 7.0, 6.5, 3.7};
double[] testArray2 = {5.6, 4.7, 2.8, 3.7, 5.8, 2.7, 6.4, 1.8, 9.5, 10.2};
double biggestDifference = 0;
double differenceCounter = 0;
double currentDifference;
double firstArrayValue;
double secondArrayValue;
if (testArray1.length == testArray2.length) {
for (int i = 0; i < testArray1.length; i++) {
firstArrayValue = testArray1[i];
secondArrayValue = testArray2[i];
if (firstArrayValue != secondArrayValue) {
differenceCounter += 1;
currentDifference = Math.abs(firstArrayValue - secondArrayValue);
if (currentDifference > biggestDifference) {
biggestDifference = currentDifference;
}
}
}
if (differenceCounter > 0) {
System.out.println("Number of differences was " + differenceCounter);
System.out.println("The biggest difference was " + biggestDifference);
}
} else {
throw new IllegalArgumentException("Sorry, arrays have different length :(");
}
然后它将打印:
Number of differences was 10.0
The biggest difference was 6.499999999999999
您应该使用普通的 IDE,如 InteliJ 或 Eclipse,它会显示编译时错误。干杯。