我在Object
s的2d数组中有数据。我正在寻找一种组合重复数据的算法,但我的算法丢失了重复的数据。此外,它保持所有行在顶部,所以,我的数据是:
ECE 201电气和计算机工程I 2.6666666666665
BIO 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.6666666666667
BE 100简介生物医学工程1.2
但它填充了null
s。我使用以下算法:
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]);
}
}
}
}
}
我的数据变成:
已找到!ECE 201 ECE 201 2.6666666666665
找到!BIO 101 BIO 101 2.0
找到!CS 101 CS 101 3.5
找到!CS 101 CS 101 3.5
找到!CS 101 CS 101 3.5
找到!AE 101 AE 101 2.5
找到!AE 101 AE 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
找到!ECE 200 ECE 200 3.5
找到!BIO 100 BIO 100 2.2
找到!CS 101 CS 101 3.75
找到!AE 101 AE 101 1.6666666666667
找到!BE 100 BE 100 1.2
//找到了!只是为了确保它是正确的输出。
如何改进此算法以产生所需的结果?
您可以使用集合或哈希表来代替编写算法。
套装是您更好的选择;它们不允许重复。你可以在这里阅读更多关于它们的信息:http://docs.oracle.com/javase/tutorial/collections/interfaces/set.html
哈希表是实现集合的一种方法。要使用这些,您需要编写一个哈希函数,将数据转换为哈希键,然后使用该键对表进行索引,并将未处理的值存储在表中。