【发布时间】:2015-11-18 11:53:03
【问题描述】:
我必须找到两个 Set 对象之间的交集。
【问题讨论】:
-
参数的类型是什么?您的
Set班级或java.util.Set? -
为什么实际的实现被删掉了?这个问题在目前的形式中几乎没有任何意义。
标签: java arrays intersection
我必须找到两个 Set 对象之间的交集。
【问题讨论】:
Set 班级或java.util.Set?
标签: java arrays intersection
变量intCount在最里面的if-条件中是局部的,这意味着只访问interArr的第一个条目。重新排列实现如下。
public int[] intersection(Set parSet)
{
int[] interArr = new int[numbers.length];
int[] testArr = parSet.toArray();
int intCount = 0; // initialization out of the loop
for(int index = 0; index < numbers.length; index++)
{
for(int compareInt = 0; compareInt < testArr.length; compareInt++)
{
if(numbers[index] == testArr[compareInt])
{
interArr[intCount] = testArr[compareInt];
intCount++;
}//end if
}//end inner for
}//end outter for
return interArr;
}//end method intersection
【讨论】:
你在正确的轨道上:使用嵌套循环进行详尽的搜索(尽管可以使用 java 集合进行简化),只有一些小问题:
1)你没有为你的类定义toArray()方法,所以假设你在调用parSet.toArray()时指的是parSet.numbers
2) 计数器intCount 需要在循环之外以避免在每次迭代中设置为0。
所以正确的版本应该是:
public int[] intersection(Set parSet) {
int[] interArr = new int[numbers.length];
int[] testArr = parSet.numbers; //you didn't define toArray() for the class Set
int intCount = 0; // move this variable out of the loop
for (int index = 0; index < numbers.length; index++) {
for (int compareInt = 0; compareInt < testArr.length; compareInt++) {
if (numbers[index] == testArr[compareInt]) {
interArr[intCount] = testArr[compareInt];
intCount++;
}//end if
}//end inner for
}//end outter for
return interArr;
}//end method intersection
【讨论】: