(Math.random() > 0.75) ? type = TreeType.BIG_TREE : type = TreeType.TREE
(Math.random() > 0.75) は、コンソールによると、変数ではなく値を返すのはなぜですか? 上記のステートメントは、if-else はしごの一部です。
(Math.random() > 0.75) ? type = TreeType.BIG_TREE : type = TreeType.TREE
(Math.random() > 0.75) は、コンソールによると、変数ではなく値を返すのはなぜですか? 上記のステートメントは、if-else はしごの一部です。
あなたは次のことを望みます
type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE
良い質問。実際にあなたが持っているものは、完全なステートメントにすれば仮説的に機能する可能性があります. 例えば
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
より簡潔で読みやすいため、好ましいでしょう。
によると:http://java.about.com/od/t/g/ternaryoperator.htm
最初のオペランドはブール式です。式が true の場合、2 番目のオペランドの値が返されます。それ以外の場合は、3 番目のオペランドの値が返されます。
あなたが見ているのは、割り当てが完了した後の type の値が返されることだと思います。(私はしばらくの間 Java を行っていませんが、おそらくそうです。)代わりに、次のことを行う必要があります。
type = (Math.random() > 0.75) ? TreeType.BIG_TREE : TreeType.TREE;