【问题标题】:c++ for loop counter failingc ++ for循环计数器失败
【发布时间】:2013-11-14 20:29:27
【问题描述】:

您好,我试图在一个简单的一维数组中出现 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 循环来检测边缘。我试过弄乱变量,但无济于事。白色 = 1 和黑色 = 0 的原因是因为我正在使用这个循环来解决基于视觉的问题。任何帮助将不胜感激。

【问题讨论】:

  • 在什么情况下prevValue曾经false
  • 良好的格式可能会大大增加您调试自己代码的机会。此外,如果您总是将大括号放在单行 if 或 else 语句中,则深层嵌套 if 出错的机会将更少
  • 只有当 i==0 && white==true && prevValue==false 时,您的计数器才会增加。因此,您检查的数组中唯一的条目是 testarray[0]。
  • 从头开始,你会比修改这段代码更快地找到解决方案...
  • prevValue 基本上是白色的,所以如果之前的值是白色的应该是假的

标签: c++ if-statement for-loop counter


【解决方案1】:

因为 prevValue 始终为真:它永远不会来到这个块:

if((white ==true) && (prevValue == false)) {
    if(i == 0) {
    check = true;
    i++;
    }

    else
    check = false;
}

所以因为这个 check 永远不会分配给 'true' 所以计数器不会增加

【讨论】:

    【解决方案2】:

    如果我已经理解了你所需要的就是首先找到 1,然后计算零的数量。

    如果使用标准算法,可以在一个语句中完成。

    int counter = std::count( std::find( std::begin( testarray ), std::end( testarray ), 1 ), 
                              std::end( testarray ), 
                              0 );
    

    【讨论】:

      【解决方案3】:

      因为,对于数组的这个值,检查总是假的,它需要为真才能允许计数器变量像你写的那样递增:

       if (check) 
           counter++; 
      

      另外,你的 for 循环没有达到值 testarray[8],你必须写

       for (int i = 0; i<9; i++)
      

      为了包含从 testarray[0] 到 testarray[9]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-30
        • 2020-09-05
        • 2021-01-15
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多