2017-05-01 36 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 **首先它也没有奏效。 和'我'是元素用户输入与列表的前几个元素进行检查。 –