2017-05-01 37 views
-1

我在寫一個C++程序,它接受用戶的輸入並在數組中輸入該數字。此外,我還包括,如果用戶輸入號碼,它已經存在於列表中。然後控制檯只顯示一條消息。但不知何故,當我進入一個獨特的元素它仍然顯示我C++中非重複的數組值

重複值不允許

請看到這個代碼,並告訴我在哪裏,我錯了。

void addElement(int i){ 
    if (rear==-1 && top == 0){ 
     rear++; 
     Array[rear]=i; 
    } 

    else { 
      for(int l=1 ; l<=rear ; l++){ 
      if((Array[l]) == i){ 
       cout<<"\n*Duplicate value not allowed*\n"; 
      } 
      else{ 
       rear++; 
        Array[rear] = i; 
      } 
     } 
    } 
} 
+0

代碼你應該注意到的是,當您檢查重複的元素被事先插入。所以它肯定會告訴你重複發現。 – xhg

+0

@xhg謝謝,我明白了.. –

+0

爲什麼不使用'std :: set'代替? –

回答

1

有兩個問題我與你的邏輯看,

    在for循環中你是不是從第一個元素,但由於該指數 第二個元素迭代
  1. 1
  2. 一旦副本被發現你應該退出for循環,如果 沒有找到重複,那麼只能插入值,而不是你多次做 。

見下

void addElement(int i) { 
    if (rear==-1 && top == 0) { 
     rear++; 
     Array[rear]=i; 
    } 

    else { 
     for(int l=0 ; l<=rear ; l++) { 
      if((Array[l]) == i){ 
       cout<<"\n*Duplicate value not allowed*\n"; 
       return; 
      }  
     } 
     rear++; 
     Array[rear] = i;  
    } 
} 
+0

是的,我試過它與l = 0,它也沒有工作,但我沒有嘗試返回時發現重複....它的工作,謝謝 –

+0

順便說一句我可以使用「休息」,而不是返回? –

+0

除此之外,還有一件事情你應該看,如答案建議 –

0

你的邏輯是有缺陷的:

for(int l=1 ; l<=rear ; l++){ 
     if((Array[l]) == i){ 
      cout<<"\n*Duplicate value not allowed*\n"; 
     } else { 
      rear++; 
      Array[rear] = i; 
     } 
    } 

在這裏,你檢查的第二個元素等於i(順便說一句你爲什麼不使用索引0處的第一個開始?),如果你的心不是添加i到陣列。然後你繼續檢查下一個元素是否等於i。因此,你總是會首先添加i,然後發現它在數組中。

相反,您應該首先檢查它是否在陣列中,並且只有在您檢查了全部元素後,纔會添加它或打印消息。

+0

我檢查邏輯爲** l = 0 **首先它也沒有奏效。 和'我'是元素用戶輸入與列表的前幾個元素進行檢查。 –