2017-02-18 2 views
2

これはかなり新しく、なぜこれが動作しないのか理解できないのかを理解するために何度も試みてきました。配列内の重複を検出する

private int indexOf(int searchingNum) 
{ 
    int x = searchingNum; 
    for (int i = 0; i<numberArray.length; i++){ 
     if (numberArray[i]==x) 
      index = i; 
     else 
      index = -1; 
    } 
    return index; 
} 

public boolean addNumber(int numberToAdd) 
{ 
    int x = numberToAdd; 
    if (indexOf(x)!=-1) 
     return false; 
    if (count<numberArray.length&&indexOf(x)==-1){ 
     count++; 
     numberArray[count-1] = x; 
     return true; 
    } 

    if (count>=numberArray.length&&indexOf(x)==-1){ 
     count++; 
     newArray = Arrays.copyOf(numberArray, 2* numberArray.length); 
     numberArray = newArray; 
     numberArray[count-1] = x; 
    } 
    return true;  
} 

このメソッドは重複を許してはいけません。正しい方向のポインターがあれば幸いです。

ありがとうございます。

+0

重複を避けたい場合は、配列の代わりに 'Set'を使うことを検討してください。 –

答えて

2

あなたindexOfが正しくありません:あなたはの一致を検出した後にループを継続するので、配列の最後の項目が一致して起こる場合を除き、あなたのコードは-1を返します。

、この問題を解決ループの内側からiを返すには:

for (int i = 0 ; i < numberArray.length ; i++) { 
    if (numberArray[i]==x) 
     return i; 
} 
// If we are here, we did not find anything; return -1 
return -1; 
+0

私はそれを見ていないとは信じられない!ありがとうございました!問題は解決しました。 –

1

ここにあなたのコードの正確なバージョンです:

private boolean contains(int searchingNum) 
{ 
    for (int i = 0; i<numberArray.length; i++){ 
     if (numberArray[i]==x) 
      return true; 
    } 
    return false; 
} 

public boolean addNumber(int numberToAdd) 
{ 
    int x = numberToAdd; 
    if (contains(x)) 
     return false; 
    if (count<numberArray.length){ 
     count++; 
     numberArray[count-1] = x; 
} 
    else{ 
     count++; 
     int []newArray = Arrays.copyOf(numberArray, 2* numberArray.length); 
     numberArray = newArray; 
     numberArray[count-1] = x; 
    } 
    return true;  
} 

はこれを試してみてください。一方、配列が以前に初期化されていない場合(つまり、このメソッドのみを使用して配列内にすべての要素が追加された場合)、要素の一意性しか保証できません。

関連する問題