为什么SearchBack中的if(find == A [i])除了第一次之外没有给出真的?在调试时它显然没有用,除了第一次

时间:2015-10-24 12:28:59

标签: c++

为什么if(find == A[i])中的SearchBack评估为真,除非是第一次?

#include <iostream>

using namespace std;

int Count(int find, int A[], int size);
bool SearchBack(int A[], int size, int find, int in);

int main()

{
    int A[25] = 
    { 1,2,1,85,14,7,2,2,14,200,7,62,7,19,19,200,17,2,19,20,85,44,63,7,63 }, Q;
    for (int i = 0; i < 25; i++)
    {
        Q = 0;
        Q = Count(A[i], A, 25);
        if (Q != 0)
        {
            cout << A[i] << " : " << Q << endl;
        }
    }
    system("pause");
}

int Count(int find, int A[], int size)
{
    int counter = 0;
    bool N;
    for (int j = 0; j < size; j++)
    {
       if (find == A[j])
       {
            N = SearchBack(A, 25, A[j], j - 1);
            if (N == false)
            {
                counter++;
            }
            else
               return counter;
        }
        return counter;
     } 
 }

bool SearchBack(int A[], int size, int find, int in)
{  
    for (int i = 0; i <= in; i++) 
    {
        if (find == A[i])
            return true;
        else
            return false;
    }
}

2 个答案:

答案 0 :(得分:0)

基于&#34;为什么如果(搜索== A [i])在SearchBack中评估为真,除非是第一次?&#34;。

SearchBack()函数没有问题。在count()函数中,我看到你已将return counter置于for循环中,如果条件仅在第一次迭代中终止循环。

只需将for语句放在for循环之后:

int Count(int find, int A[], int size) {

    int counter = 0;

    bool N;

    for (int j = 0; j < size; j++)

     {
        if (find == A[j])

            {
                N = SearchBack(A, 25, A[j], j - 1);

                if (N == false)
                    {
                        counter++;
                    }
                else
                    return counter;
            }
    }
    return counter;

}

答案 1 :(得分:0)

您应该更改以下几项内容:

SearchBack() find,只要A[i]find不同,就会返回,并且不要等到第一个元素之后是否出现A for (int i = 0; i < in; i++) { if (find == A[i]) return true; } return false; 。这样做:

Count()

然后,在N中,您会犯同样的错误:只要true counter返回,return counter就不能再增加一次。将for放在SearchBack()循环之外。

最后,在j - 1中,您希望main()作为停止条件,而是在i函数中处理的元素的当前位置。例如,您可以将Count()传递给Count(),然后SearchBack()可以将其传递给// in main for (int i = 0; i < 25; i++) { Q = 0; Q = Count(A[i], A, 25, i); ... // in Count, the current_element correspond to the 'i' above N = SearchBack(A, 25, A[j], current_element); ...

A

这样,您只会打印一次this.channel = ServerSocketChannel.open(); this.channel.socket().bind(new InetSocketAddress(4321)); this.channel.configureBlocking(false); this.selector = Selector.open(); this.channel.register(selector, SelectionKey.OP_ACCEPT); 的元素,并显示确切的出现次数。