Why doesn't this method work? Java ternary operator

前端 未结 6 568
情歌与酒
情歌与酒 2020-12-03 03:53

What\'s wrong with this code:

void bark(boolean hamlet) {
    hamlet ? System.out.println(\"To Bark.\") : System.out.println(\"Not to Bark\");
}
相关标签:
6条回答
  • A ternary statement has to return something, you could use an if here:

    void bark(boolean hamlet)
    {
      if (hamlet)
      {
        System.out.println("To Bark.")
      }
      else
      {
         System.out.println("Not to Bark");
      }
    }
    
    0 讨论(0)
  • 2020-12-03 04:12

    According to §JLS.15.25:

    ConditionalExpression:
    ConditionalOrExpression
    ConditionalOrExpression ? Expression : ConditionalExpression
    

    The conditional operator is syntactically right-associative (it groups right-to-left). Thus, a?b:c?d:e?f:g means the same as a?b:(c?d:(e?f:g)).

    The conditional operator has three operand expressions. ? appears between the first and second expressions, and : appears between the second and third expressions.

    The first expression must be of type boolean or Boolean, or a compile-time error occurs.

    It is a compile-time error for either the second or the third operand expression to be an invocation of a void method.

    0 讨论(0)
  • 2020-12-03 04:12

    I should imagine its because the ternary operator is expecting to assign a value. Try this:

    void bark(boolean hamlet) {
        String result = hamlet ? "To Bark!" : "Not to Bark";
        System.out.println(result)
    }
    
    0 讨论(0)
  • 2020-12-03 04:13

    Ternary operators must return something. So you can put it inside the print statement like such:

    void bark(boolean hamlet) 
    {
        System.out.printf("%s\n", hamlet ? "To Bark." : "Not to Bark");
    }
    

    Or:

    void bark(boolean hamlet) 
    {
        System.out.println(hamlet ? "To Bark." : "Not to Bark");
    }
    
    0 讨论(0)
  • 2020-12-03 04:14

    Ternary operators can't have statements that don't return values, void methods. You need statements that have return values.

    You need to rewrite it.

    void bark(boolean hamlet) {
         System.out.println( hamlet ? "To Bark." : "Not to Bark" );
    }
    
    0 讨论(0)
  • 2020-12-03 04:26

    You can read why in the Java Language Specification, 15.25. Conditional Operator ? :

    It is a compile-time error for either the second or the third operand expression to be an invocation of a void method.

    You need to do as several of the other answers suggest, and apply the conditional operator to just the argument.

    0 讨论(0)
提交回复
热议问题