我有一个 long 类型的数组,我只是想编写一个可以查找和删除重复项的代码。它有点工作,但它有一些错误。我不确定我做错了什么。我真的很感激帮助。
我添加了数字:77、44、22、11、66、33、55、55、99、99、33、0、0
输出为:77、44、22、11、66、33、55、55、99、99
因此它删除了 33 个重复项和两个 0,并完全跳过了 55 和 99。
到目前为止,这是我的代码:
nElems 是数组的大小
public int noDups()
{
int duplicates = 0;
for(int i = 0; i<nElems; i++)
{
for(int j = i+1; j<nElems; j++)
{
if( i == j)
{
break;
}
else if (a[i] == a[j])
{
duplicates++;
delete(j);
nElems--;
}
}// end for j
}// end for i
return duplicates;
}// noDups()
我的删除看起来像这样:
public boolean delete(long value)
{
int j;
for(j=0; j<nElems; j++) // look for it
{
if( value == a[j] )
break;
if(j==nElems) // can’t find it
{
return false;
}
else // found it
{
for(int k=j; k<nElems; k++) // move higher ones down
{
a[k] = a[k+1];
nElems--; // decrement size
return true;
}
}
}// end for i
} // end delete()