嗨我想在一个简单的1d数组中发生1之后计算零的数量我不知道为什么计数器总是为零。
int main ()
{
int testarray[9];
testarray[0] = 0;
testarray[1] = 0;
testarray[2] = 1;
testarray[3] = 1;
testarray[4] = 0;
testarray[5] = 0;
testarray[6] = 0;
testarray[7] = 1;
testarray[8] = 1;
int counter = 0;
bool white = false;
bool prevValue =true;
bool black = true;
bool check = false;
int num = 0;
for (int i = 0; i<8; i++) {
num = testarray[i];
if (num == 1)
white = true;
else
white = false;
if((white ==true) && (prevValue == false)) {
if(i == 0) {
check = true;
i++;
}
else
check = false;
}
else {
if (check)
counter++;
}
prevValue = true;
}
cout << "Counter: "<<counter;
return 0;
}
实际实现涉及使用此for循环来检测边缘。我试过弄乱变量,但无济于事。 white = 1,black = 0的原因是因为我使用这个循环来解决基于视觉的问题。任何帮助都会被贬低。
答案 0 :(得分:0)
因为prevValue总是如此:它永远不会出现在这个块中:
if((white ==true) && (prevValue == false)) {
if(i == 0) {
check = true;
i++;
}
else
check = false;
}
所以因为检查永远不会分配给'true'所以计数器不会增加
答案 1 :(得分:0)
如果我已经理解你需要的是先找1然后计算零的数量。
如果使用标准算法,可以在一个语句中完成。
int counter = std::count( std::find( std::begin( testarray ), std::end( testarray ), 1 ),
std::end( testarray ),
0 );
答案 2 :(得分:0)
因为,使用数组的这个值,check总是为false,并且它必须为true才能允许计数器变量按照你所写的那样递增:
if (check)
counter++;
另外,你的for循环没有达到testarray [8]的值,你要编写
for (int i = 0; i<9; i++)
以便从testarray [0]包括到testarray [9]