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

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

4

3 回答 3

8

你想要以下

type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE
于 2013-07-01T22:14:27.283 回答
2

好问题。实际上,如果你把它作为一个完整的陈述,你所拥有的假设是可行的。例如

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

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

明显地,

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

将是首选,因为它更简洁和可读。

于 2013-07-01T22:20:24.760 回答
0

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

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

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

type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE;
于 2013-07-01T22:15:51.210 回答