2017-02-18 54 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您的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;  
} 

試試這個。同時,如果數組之前未被初始化,那麼它只能保證元素的唯一性,即所有元素都只能使用此方法添加到數組中。