逻辑语句不返回变量,而是返回值

时间:2013-07-01 22:12:33

标签: java

(Math.random() > 0.75) ? type = TreeType.BIG_TREE : type = TreeType.TREE

为什么(Math.random()> 0.75)根据控制台而不是变量返回一个值?上述陈述是if-else阶梯的一部分。

3 个答案:

答案 0 :(得分:8)

您需要以下

type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE

答案 1 :(得分:2)

好问题。实际上,如果你把它作为一个完整的陈述,那么可以假设工作。 e.g。

TreeType tree = 
          (Math.random() > 0.75) ? (type = TreeType.BIG_TREE) : 
                                   (type = TreeType.TREE);

编译正常(假设您将type分配给TreeType类型的东西,当然)。请注意,我所做的只是添加TreeType tree =(并添加括号来处理操作的顺序)。这是因为赋值实际上返回一个值,特别是右侧评估的值。

显然,

type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE

会更受欢迎,因为它更简洁易读。

答案 2 :(得分:0)

根据:http://java.about.com/od/t/g/ternaryoperator.htm

  

第一个操作数是布尔表达式;如果表达式为true,则返回第二个操作数的值,否则返回第三个操作数的值。

我相信你看到的是返回完成赋值后的类型值。 (我有一段时间没有做过java,但情况可能就是这样。)你应该这样做:

type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE;