-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、 type の何かに割り当てていると仮定します)。私が行ったのは追加(および操作の順序を処理するための括弧の追加)TreeTypeだけであることに注意してください。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

最初のオペランドはブール式です。式が true の場合、2 番目のオペランドの値が返されます。それ以外の場合は、3 番目のオペランドの値が返されます。

あなたが見ているのは、割り当てが完了した後の type の値が返されることだと思います。(私はしばらくの間 Java を行っていませんが、おそらくそうです。)代わりに、次のことを行う必要があります。

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