首页 > 解决方案 > 比较两个双精度数组,然后打印差异数 + 最大差异

问题描述

我有两个具有双值的数组。

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,这让我认为我已经完全错误地完成了代码。

提前致谢。

标签: javaarraysdouble

解决方案


  1. 首先:for (int k = 0; k < testArray1[i].length; k++){是错误的。当您调用 testArray1[i] 时,它返回双精度数而不是数组,您无法获取单双精度数的长度属性。

  2. 下一步:testArray1[i][k] != testArray2[i][k]这些数组不是矩阵,所以你不能像 [][] 这样的双括号,如果你想从数组中获取元素,它应该只是 testArray[i]。

  3. nDiff += ; 加上什么?你必须在 += 之后放一些东西 nDiff += k;

  4. 您想比较第一个元素与第一个元素、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,它会显示编译时错误。干杯。


推荐阅读