为什么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;
}
}
答案 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);
的元素,并显示确切的出现次数。