我正在更新我在 Java 方面的知识,并在代码战中进行练习。问题是如果元素“相同”,则比较两个数组。“相同”的意思是'b'中的元素是'a'中的元素的平方,无论顺序如何。我试图做的解决方案是获取“b”中元素的平方根,并使用 Math.sqrt() 检查它是否存在于元素“a”中。但是,当我将它用作 contains() 的参数时,它总是返回 false。
因此,为了检查元素“b”的平方根是否确实存在于“a”中,我尝试了一个简单的 if-else 来检查特定元素。但是当我将它与 Math.sqrt() 合并时,问题就出现了。
这是集合 a 和 b 的元素
int[] a = {121, 144, 19, 161, 19, 144, 19, 11};
int[] b = {121, 14641, 20736, 361, 25921, 361, 20736, 361};
我已转换为列表
List<Integer> setAList = Arrays.stream(setA)//int[] setA - parameter of a function
.boxed()
.collect(Collectors.toList());
List<Integer> setBList = Arrays.stream(setB)//int[] setB - parameter of a function
.boxed()
.collect(Collectors.toList());
我将数组转换为 List 以利用 contains() 方法。这是我尝试检查特定元素时的代码
double sqrd = Math.sqrt(setBList.get(6));
return setAList.get(5) == sqrd ? true : false;
这给出了预期的结果 - 是的。现在这是我将它合并到 for 循环时的代码
boolean same = true;
for(int indexB : setB) {
same = setAList.contains(Math.sqrt(indexB)) ? true : false;
System.out.println(Math.sqrt(indexB) + " " + same);
}
这是结果
11.0 false
121.0 false
144.0 false
19.0 false
161.0 false
19.0 false
144.0 false
19.0 false
false
起初我虽然问题可能是因为数据类型,但我尝试将 double 转换为 int 但我仍然得到相同的结果。