【问题标题】:I need to know if these two sentences are the same in programming我需要知道这两个句子在编程中是否相同
【发布时间】:2016-03-02 23:18:45
【问题描述】:

我需要知道是否:

return someBooleanRecursiveMethod(n) || someBooleanRecursiveMethod(n-1);

相当于:

if (someBooleanRecursiveMethod(n)) 
    return true;
else if (someBooleanRecursiveMethod(n - 1))
    return true;    
return false;

如果有人能快速解决这个问题,我将不胜感激。

【问题讨论】:

    标签: java c syntax return


    【解决方案1】:

    它们是不等价的,因为 someBooleanRecursiveMethod 返回一个布尔值(大概),第一个表达式可以评估为 false ||假的是假的。 除非您指定,否则第二个表达式永远不会返回 false。

    if (someBooleanRecursiveMethod(n))
        return true; 
    else if (someBooleanRecursiveMethod(n - 1))
        return true;
    else
        return false;
    

    在这种情况下是的,两个表达式是相同的,应用于 n 或 n - 1 的方法将返回 true,否则,当两者都为 false 时返回 false(与 or 运算符的行为相同)。

    【讨论】:

    • 最后一个else 与结果不是很相关。如果两个条件都为假,它将返回false,否则将返回true,这正是|| 运算符所做的。我理解你的困惑,这是 OP 的错,因为代码的格式很糟糕。这证明了代码格式化的重要性。
    • 当他/她第一次发布问题时,代码缺少错误返回
    • 不,不是。但是代码很难理解。即使在有人编辑之后。 OP从未编辑过这个问题。顺便说一句,在 c 或 c++ 中缺少 return 会导致 Undefined Behavior,我不知道 java 是否会有默认返回值。
    • @iharob:早期的编辑不会显示在编辑历史中,所以 Pedro 可能是对的。 (宽限期是用于编辑小错别字,但通常涉及相当大的编辑,这会使快速回答变得毫无用处。)
    • @MOehm 我不知道。我认为佩德罗确实写了一个很好的答案,这是这个问题中最好的。
    【解决方案2】:

    是的,当然,说|| 与说OR 相同。您的示例做同样的事情,它只是将两个语句分开。它们本质上是相同的。

    例如:

    if (I like apples) {
        System.out.println("I like a fruit")
    } else if (I like bananas) {
        System.out.println("I like a fruit")
    }
    

    现在,我可以通过两种方式清理这两行代码。我可以做一个 switch 语句,或者,我可以使用 or 运算符:

    if (I like bananas OR I like apples) {
        System.out.println("I like a fruit")
    }
    

    又名

    if (x = 7 || x = 8) {
        System.out.println("Either 7 OR 8")
    }
    

    我提到的另一种方式称为 switch 语句。它稍微高级一点,但它只是说,

    我有这个条件,我有多个选项,在这个选项上做这个

    switch(x) {    
    case 6:    
        System.out.println("It is 6");
        break;    
    case 7:    
        System.out.println("Either 7 OR 8")
        break;
    case 8:
        System.out.println("Either 7 OR 8")
        break;
    case 9:    
        System.out.println("It is 9")
        break;
    }
    

    基本上,最终你只是在做同样的事情。要么您在一行代码中完成所有操作,要么您将其拆分并在多行代码中完成。如果您想要每个输入的特定输出,请将其拆分。否则,无论哪种方式你都很好。

    【讨论】:

    • 你真的会这样写代码吗?当你在这种代码中搜索它时,你能修复一个错误吗?或者你依赖IDE来格式化它?这似乎是很多程序员都会做的事情,我个人不明白为什么不格式化代码会让你更快!
    • @iharob 你是在说我的格式吗...?我写这个是为了帮助用户,代码看起来可读。我只是在堆栈溢出本身中编写了这段代码,而不是在 IDE 中。
    • 我不认为您可以编写完全没有格式的代码,然后尝试使其成为正确的做法。我了解您正在尝试提供帮助,我认为这是一件好事,但请记住,任何人都可以跟随您并思考(代码格式似乎无关紧要,专业程序员并不关心这一点)。
    • @iharob 感谢您以正确的格式进行编辑,非常感谢。
    • 别担心。试着多关心一下,记住程序的阅读量远大于编写量。
    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多