【问题标题】:The if statement is redundant in JavaJava 中的 if 语句是多余的
【发布时间】:2016-04-28 06:19:36
【问题描述】:

我在 NetBeans 上收到一个灯泡说“if 语句是多余的”

我想知道这两者是如何相等的

public boolean isVowel(char in)
{
    char temp = Character.toLowerCase(in);

    if (temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u')
    {
        return true;
    }
    else
    {
        return false;
    }
}

public boolean isVowel(char in)
{
    char temp = Character.toLowerCase(in);

    return temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u';
}

我可以看到如果其中一个元音与 temp 匹配,它将如何返回 true。但是,我没有看到它会如何返回错误。如果不满足任何条件,它会简单地返回 false 吗?

已解决:我以错误的方式看待问题。要让它返回假,每个条件语句都必须是假的。理想情况下,如果 return 语句等同于:

return false || false || false || false || false;

如果满足任何一个条件则为真

return false || false || false || false || true;

谢谢你们,真的很有帮助。

【问题讨论】:

  • 是的,因为表达式temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u' 的结果将是false...
  • 啊,我现在明白了。如果要返回 false,则每个条件都必须等于 false。我以错误的方式看待问题。

标签: java if-statement return conditional-statements


【解决方案1】:

这两个语句是相同的。

int x = #; //user input
if (x==1) {  //any condition resulting in a true or false
    return true;
} else {
     return false;
}

return (x==1); //same thing, returning true if true, false if false;

【讨论】:

    【解决方案2】:

    这个表达式:

    (temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u') 
    

    计算一个布尔值。一个 if 语句测试这个值。因此,与其在 if/else 子句中返回布尔值来测试这个表达式,不如直接返回它。

    编辑你可以证明你的字符是否是元音? 这样做:

    public boolean isVowel(char in) {
    
        return "aeiou".indexOf(Character.toLowerCase(in)) < 0;
        }
    

    【讨论】:

    • 您能详细说明一下吗? “z”应该是什么?
    • 我改进了答案。
    【解决方案3】:

    两者确实是相同的(if 语句是多余的),原因如下。

    == 是一个相等运算符,这意味着,如果左侧匹配右侧,则计算结果为 true,否则计算结果为 false|| 是一个条件运算符,这意味着,如果左侧的相等计算为 false,它将检查右侧是否计算为 true(或者,如果左侧计算为 @ 987654329@,则表达式将计算为true,称为short-circuiting)。如果它们都计算为false,那么整个表达式将计算为false

    因此,您所拥有的if 语句基本上变成了:

    if(<expression>==true) { //in the case that the conditional evaluates to true
        return true;
    }
    else { //in the case the conditional evaluates to false
        return false;
    }
    

    所以,这可以简化为表达式,因为无论如何它都会评估为 boolean

    return <expression> //will be true if true, false if false
    

    There's more on this in the Oracle documentation

    【讨论】:

      【解决方案4】:

      boolean isNumeric(char cc){ //开始 // 测试 cc 是否为数字 返回 ( (cc == '0') | (cc == '1') | (cc == '2') | (cc == '3') | (cc == '4') | (cc == '5') | (cc == '6') | (cc == '7') | (cc == '8') | (cc == '9') ); } // isNumeric

      【讨论】:

        猜你喜欢
        • 2021-02-21
        • 2019-06-06
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 2014-03-03
        相关资源
        最近更新 更多