【问题标题】:Finding intersection寻找交点
【发布时间】:2015-11-18 11:53:03
【问题描述】:

我必须找到两个 Set 对象之间的交集。

【问题讨论】:

  • 参数的类型是什么?您的Set 班级或java.util.Set
  • 为什么实际的实现被删掉了?这个问题在目前的形式中几乎没有任何意义。

标签: java arrays intersection


【解决方案1】:

变量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

【讨论】:

    【解决方案2】:

    你在正确的轨道上:使用嵌套循环进行详尽的搜索(尽管可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2012-05-26
      • 1970-01-01
      • 2020-06-21
      • 2014-06-12
      • 2011-11-29
      • 2021-02-15
      相关资源
      最近更新 更多