0

我在 s 的二维数组中有数据Object。我正在寻找一种结合重复数据的算法,但我的算法丢失了重复数据。此外,它将所有行保留在顶部,因此,我的数据是:

ECE 201 电气和计算机工程 I 2.6666666666666665

生物 101 生物学 I 2.0

CS 101 计算机科学 I 3.5

AE 101 航空航天工程 I 2.5

BE 101 生物医学工程 I 2.0

CS 101 计算机科学 I 2.0

CS 102 计算机科学 II 3.0

BE 100 介绍生物医学工程 3.6

ECE 200 介绍电气和计算机工程 3.5

BIO 100 介绍生物学 2.2

CS 101 计算机科学 I 3.75

AE 101 航空航天工程 I 1.6666666666666667

BE 100 介绍生物医学工程 1.2

但它充满了nulls。我使用以下算法:

for (int i = 0; i< finalData.length; i++)
{
  if (finalData[i][1] != null)
  {
    String first = (String)finalData[i][1];
    for (int j = i; j< finalData.length; j++)
    {
      if (finalData[j][1]!= null)
      {
        String second = (String)finalData[j][1];
        if (first.equals(second))
        {
          double one = (double)finalData[i][6];
          double two = (double)finalData[i][6];
          finalData[i][7] = (one + two)/2;
          System.out.println("found!\t" + first + "\t" + second + "\t" +  finalData[i][7]);
        }
      }
    }
  }
}

我的数据变成:

成立!欧洲经委会 201 欧洲经委会 201 2.6666666666666665

成立!生物 101 生物 101 2.0

成立!CS 101 CS 101 3.5

成立!CS 101 CS 101 3.5

成立!CS 101 CS 101 3.5

成立!自动曝光 101 自动曝光 101 2.5

成立!自动曝光 101 自动曝光 101 2.5

成立!BE 101 BE 101 2.0

成立!CS 101 CS 101 2.0

成立!CS 101 CS 101 2.0

成立!CS 102 CS 102 3.0

成立!BE 100 BE 100 3.6

成立!BE 100 BE 100 3.6

成立!欧洲经委会 200 欧洲经委会 200 3.5

成立!生物 100 生物 100 2.2

成立!CS 101 CS 101 3.75

成立!AE 101 AE 101 1.6666666666666667

成立!BE 100 BE 100 1.2

//找到了!只是为了确保它是正确的输出。

如何改进此算法以产生所需的结果?

4

1 回答 1

1

您可以使用集合或哈希表,而不是编写算法。

套装是您更好的选择;他们不允许重复。您可以在此处阅读有关它们的更多信息:http: //docs.oracle.com/javase/tutorial/collections/interfaces/set.html

哈希表是一种实现集合的方式。要使用这些,您需要编写一个散列函数将您的数据转换为散列键​​,然后您将使用该键对表进行索引并将未散列的值存储在那里。

于 2012-12-05T15:21:14.577 回答