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()