2012-06-21 73 views
0
int lf = ((t.left==null) = (t.right==null)) ? 1:0; 

如果大括号中的语句为真,则返回1,但在中间,向lefT赋予正确值的要点是什么?这条线返回什么?

+11

这是否甚至编译?编译器不应该允许赋值给表达式。 – Paulpro

+1

没有内部赋值语句,否则代码不会编译。第三个操作符必须是另一个'=='。 – EJP

+0

((t.left == null)** == **(t.right == null)):如果* t.left和t.right *都是'null'或'not null',则返回1。如果只有一个是'null',则返回零。 ((Object)o == null)返回一个布尔值。如果你返回零和一个,你可以使用true或false,并替换* int lf * * boolean lf * –

回答

10

通常情况下,您需要分配一个等号。分配的返回与表达式的RHS相同。

您会在if中的表达式中使用等号来同时分配和检查结果。

// return first and third items added if they exist. 
if ((list = GetItems()).Length > 2) { return list[0] + list[2]; } 

就在这里你已经是一个编译器错误,因为t.left==null计算为(true/false),你不能分配给。

+3

这个语法技巧有点警告,如果过度使用它会变得非常混乱。 ((面积=长度×宽度)> 100)&&(面积<1000)&&((面积2 =长度2 *宽度2)> 1000)&&((面积=面积+面积2)<(绝对面积面积= area6) - bufferarea))){return absolutemaxarea - totalarea + bufferarea; } //刚刚发生的事情' –

+0

只是要添加,上面的行是确定,在二叉搜索树,有多少节点只有一个孩子使用递归..不知道这是否有帮助 – warpstar

+0

@warpstar如果你想知道,那么这行就是'((t.left == null)!=(t.right == null))? 1:0;'这将返回true IFF只有一个节点有一个孩子,如果两个或者都没有孩子,则返回false。 –

1

如果两个t.leftt.right要么null或在同一时间不null,然后lf1否则是0

另外你还有一个错字。该行应

int lf = ((t.left==null) == (t.right==null)) ? 1:0; 

注意两个空检查之间的==

+1

我不认为这是真的,我认为无论剩下的东西评估什么,它将被替换为正确的东西。我认为只有正确的事情才是最重要的。编辑:两个空检查之间没有== – ajax333221

+1

@ ajax333221对不起,我没有注意到他的错字...在java中它不会编译,如果只有一个'='(作业) – alegen

+1

另外,你怎么确定那是预期的比较?如果编码器想要'((t.left == null)!=(t.right == null))''。永不假设。如果可能的话,总是去找出想要的东西。 –