Bool 方法返回错误值

Posted

技术标签:

【中文标题】Bool 方法返回错误值【英文标题】:Bool method returns wrong value 【发布时间】:2016-02-01 05:09:25 【问题描述】:

我为链表哈希表创建了一个bool contains(string) 方法,该方法检查值是否在哈希中。我使用辅助函数进行递归,但是当辅助函数返回 false 时,bool contains(string) 仍然返回 true。我通过调试器运行它,我可以清楚地看到它返回 false,我不知道为什么。

这是正在搜索的当前节点:

"laccoliths"->"morbiferous"->"oculi"->"unscabbarded"

我要搜索的值是"typung"

代码如下:

bool contains_h(string x, node * p) //helper method

    if (p == NULL)
        return false;
    else if (x == p->data)
        return true;
    else
        contains_h(x, p->next);

bool contains(string word) return contains_h(word, head);

【问题讨论】:

启用编译器警告(并阅读它们)可以防止这个错误。 【参考方案1】:

很简单的一个。你忘了把'return'放在最后的声明中:

bool contains_h(string x, node * p) //helper method

    if (p == NULL)
        return false;
    else if (x == p->data)
        return true;
    else
        return contains_h(x, p->next);


出于好奇,我将您的代码重写为单行代码,看看它会是什么样子:
bool contains_h(string x, node * p) //helper method

    return ((p!=NULL) && (x == p->data || contains_h(x, p->next)));

就个人而言,我更喜欢阅读您的六行。但是,其他人可能不同意,特别是因为它可以避免缺少返回语句的问题。

【讨论】:

以上是关于Bool 方法返回错误值的主要内容,如果未能解决你的问题,请参考以下文章

BOOL 属性返回错误的 BOOL 结果

检查 BOOL 状态是不是足够,或者我们也应该检查错误?

FMDB条件更新

php curl常见错误:SSL错误、bool(false)

来自 NSMethodSignature 的 BOOL 编码错误

有bool返回值的函数,只设置整个寄存器的1个字节