我在这里编写一个程序,它接受两个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]结果减法时肯定会有问题吗?
答案 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。