【问题标题】:array loop not working correctly? c++数组循环不能正常工作? C++
【发布时间】:2011-02-03 13:21:23
【问题描述】:

试图计算数组中有多少元素不等于0,是不是设置有问题?

我想检查数组中的所有值(它是一个数独板),然后当所有元素都“满”时,我需要返回 true。 有什么事吗?

bool boardFull(const Square board[BOARD_SIZE][BOARD_SIZE])
{
    int totalCount=0;
    for (int index1 = 0; index1 < BOARD_SIZE; index1++)
        for (int index2 = 0; index2 < BOARD_SIZE; index2++){ 
             if(board[index1][index2].number!=0)
                totalCount++;
        }
    if(totalCount=81)
        return true;
    else 
        return false;

【问题讨论】:

  • 我想把我的答案复制到stackoverflow.com/questions/2563553/… 这里。
  • 为什么使用常量作为维度和硬编码81 值?不应该是BOARD_SIZE * BOARD_SIZE 吗?你在这里有一个神奇的价值:p

标签: c++ arrays boolean


【解决方案1】:

只要找到第一个 0,就可以离开该函数,并且可以通过一个循环来解决这个问题:

bool boardFull(const Square board[BOARD_SIZE][BOARD_SIZE])
{
    const Square* p = board[0];
    for (int n = BOARD_SIZE * BOARD_SIZE; n; --n, ++p)
    {
        if (p->number == 0) return false;
    }
    return true;
}

但我更喜欢算法而不是手写循环:

struct Square
{
    int number;

    bool is_zero() const
    {
        return number == 0;
    }
};

#include <algorithm>
#include <functional>

bool boardFull(const Square board[BOARD_SIZE][BOARD_SIZE])
{
    return std::find_if(
        board[0],
        board[BOARD_SIZE],
        std::mem_fun_ref(&Square::is_zero)
    )== board[BOARD_SIZE];
}

【讨论】:

    【解决方案2】:

    If(totalCount=81) 是这篇文章还是您的代码中的错字?看起来你已经在那里赋值了。

    【讨论】:

      【解决方案3】:

      您有一个=,它应该是一个==。这就是我要说的,因为这是家庭作业。

      另外,为什么你有一个BOARD_SIZE 的常量,然后在最后检查81?检查BOARD_SIZE * BOARD_SIZE不是更好吗?

      【讨论】:

      • 我想这也可以,但在这种情况下,BOARD_SIZE 不会改变(在其他地方声明为 const)所以没关系(尽管编程不好?)
      • @igor,当然,但如果它没有改变,为什么你不到处都有 9,如果你不关心它是一个常数,那么打字比​​ BOARD_SIZE 少。跨度>
      【解决方案4】:

      你有 = 而不是 ==

      if (totalCount == 81)
      

      是正确的行。

      使用单个“=”执行此操作实际上会将值 81 分配给 totalCount,因此您的测试很重要:

      if (81)
      

      因为在 C++ 中任何非零都是真的,所以这总是真的

      【讨论】:

      • 我盯着这个看太久了。谢谢,现在我觉得自己很愚蠢。
      • 养成在编译时打开高级别警告的习惯——编译器会为你发现这一点
      • 或者这样写: if( 81 == totalCount ) 那么你的警告级别无关紧要。
      • @John:直到你有if (var_a = var_b),只有警告才能救你。
      猜你喜欢
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2023-03-28
      • 2012-01-02
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多