我需要开发一个线性搜索算法来测试数组是否包含testVal
这就是我写的
bool Contains(int a[], int arraySize, int testVal)
{
bool contains = 0;
for (int i = 0; i < arraySize; ++i)
{
if (a[i] == testVal)
{
contains = true;
std::cout << "true" << std::endl;
}
else if (a[i] != testVal)
{
contains = false;
std::cout << "false" << std::endl;
}
}
return contains; }
调试时,它打印正确,但它也打印19“假”。我想这与数组大小为20有关。我不知道如何修复它只打印一次没有19“假”。有人能告诉我出了什么问题吗?
答案 0 :(得分:2)
您需要做的就是在for
循环中添加以下条件:
bool contains = false;
for (int i = 0; i < arraySize && !contains; ++i)
在不更改代码中的任何其他内容的情况下,这样做的原因是contains
在找到值时设置为true
。
因此,在下一次迭代中(如果你还没有到达数组的末尾),循环的条件i < arraySize && !contains
将为false
,从而终止循环。
另一种看待它的方法是!
是否令人困惑,以下几行做同样的事情:
bool contains = false;
for (int i = 0; i < arraySize && (contains == false); ++i)
仅当i < arraySize
和contains
值为false
时,循环才会继续。由于您在找到值时将contains
设置为true
,因此for
循环会在下一次迭代时终止。
答案 1 :(得分:0)
首先,您只需要在找到它时更改contains
的值,并将false
设置为默认值,这样在搜索数组末尾时,仍然没有找到,结果将是false
如果找到,请将contain
设置为true
并将break
设置为循环,因为已找到它,无需进一步测试
并将++i
更改为i++
,在执行嵌套中的代码之前添加了差异++i
,这样如果使用10的arraySize
,则循环将是1到9,即9倍,与i++
相比,i
在执行嵌套后添加,因此使用相同的arraySize
,您的循环将为0到9,那是10次
bool Contains(int a[], int arraySize, int testVal)
{
bool contains = false;
for (int i = 0; i < arraySize; i++)
{
if (a[i] == testVal)
{
contains = true;
std::cout << "true" << std::endl;
break;
}
}
return contains;
}
答案 2 :(得分:0)
一旦发现它包含testVal,您就应该返回,或者您可以打破for循环。返回更好,并在下面的代码中完成,只需要很少的更改。
bool Contains(int a[], int arraySize, int testVal)
{
bool contains = 0;
for (int i = 0; i < arraySize; ++i)
{
if (a[i] == testVal)
{
contains = true;
std::cout << "true" << std::endl;
return contains;
}
else if (a[i] != testVal)
{
contains = false;
std::cout << "false" << std::endl;
}
}
return contains; }
您还可以在找到匹配项时更新包含,如下面的代码所示。在此代码中,您可能不必在for循环中使用return。但是,如果你这样做,你的代码会更快,因为它不会等待终止循环。
bool Contains(int a[], int arraySize, int testVal)
{
bool contains = false;
for (int i = 0; i < arraySize; ++i)
{
if (a[i] == testVal)
{
contains = true;
std::cout << "true" << std::endl;
}
}
return contains; }
答案 3 :(得分:0)
bool Contains(int a[], int arraySize, int testVal)
{
bool contains = false;
for (int i=0;i<arraySize;i++)
{
if (a[i] == testVal)
{
contains = true;
std::cout << "true" << std::endl;
return contains;
}
}
return contains; }
您必须使用 i ++ 而不是 ++ i ,并且必须在 if 块中使用return语句,以便在找到testval时而不是进行进一步的测试。