找到差异并将其存储在新阵列中?

时间:2015-03-04 00:05:38

标签: java

我在这里编写一个程序,它接受两个int []数组并相互减去每个元素,并将结果存储在一个新数组中。

这听起来很响,我知道我的数学是正确的,因为它是简单的减法..

我的方法在这里,

public int[] diff(int[] nums1, int[] nums2)
    {
        int[] diffArray = new int [nums1.length];
        int tempValue = 0;
        int tempValue2 = 0;
        int subtract = 0;


        if (nums1.length != nums2.length)
        {
            diffArray = new int[0];
        }

        else
        {

            for (int i = 0; i < nums1.length && i < nums2.length; ++i)
            {
                tempValue = nums1[i];
                tempValue2 = nums2[i];
                System.out.println("temp value 1: " + tempValue); //just me trying to debug
                System.out.println("temp value 2: " + tempValue2); //just me trying to debug

                subtract = tempValue2 - tempValue;
                System.out.println("Subtracted :" + subtract); //just me trying to debug

                diffArray[i] = subtract;


            }
        }

        return diffArray;
    }

测试这个我在我的驱动程序类中编写了几段小代码。

问题是,我在我的for循环中制作了3个调试打印语句,看看我是否有正确的数字,一切都是正确的,它似乎没有将它存储在diffArray中?

例如,

   //Array of 1 element each : r(0)
            givenArray = new int[] {4};
            givenArray2 = new int[] {4};
            diffValue = srvObj.diff(givenArray, givenArray2);
            result = (diffValue == new int[] {0}) ? PASS : FAIL;
            System.out.println(testNum + ": " + result);
            ++testNum;

   //Array of multi-elements each that are diff : r({6, 10, 37})
            givenArray = new int[] {4, 5, 3};
            givenArray2 = new int[] {10, 15, 30};
            diffValue = srvObj.diff(givenArray, givenArray2);
            result = (diffValue == new int[] {6, 10, 37}) ? PASS : FAIL;
            System.out.println(testNum + ": " + result);
            ++testNum; 

注意:我正在从array1中减去array2而不是相反。

然而我每次都会失败?我可以在我的印刷语句中看到它完成了每个元素的数学运算

当我试图给出diffArray [i]结果减法时肯定会有问题吗?

3 个答案:

答案 0 :(得分:2)

您正在检查数组相等性(以及其他测试):

    result = (diffValue == new int[] {0}) ? PASS : FAIL;

在Java中,==运算符在应用于对象时检查引用相等,并且您在此语句中创建的新数组永远不会与diffValue相同。

您需要做的是在equals()类中使用Arrays方法,该方法检查值相等

一个简单的例子:

    int[] arr1 = { 0 };
    int[] arr2 = { 0 };
    System.out.println(arr1 == arr2);               // false
    System.out.println(Arrays.equals(arr1, arr2));  // true

答案 1 :(得分:1)

在Java(以及许多其他语言)中,数组是对象,因此==无法比较它们。它比较引用,因此它检查它们是否是同一个对象,而不是它们是否包含相同的元素:

int[] a = new int[] {1,2,3};
a == a; //true
int[] b = new int[] {1,2,3};
a == b; //false

但是,有一种方法Arrays.equals()可以比较它们:

result = Arrays.equals(diffValue, new int[] {0}) ? PASS : FAIL;

您需要在程序开头导入数组:

import java.util.Arrays;

看起来你的diff()正在发挥作用。

答案 2 :(得分:-1)

您的测试条件错误 - diffValue == new int[] {6, 10, 37}将始终解析为false,因为Java相等运算符会检查这两个变量是否真的相同,而不仅仅是等效的。有关比较int数组的想法,请参阅Comparing two integer arrays in java