比如这样:3 + 6; i > 5 ? i = 5 : i = 9....

解决方案 »

  1.   


    写成这样i = i > 5 ?5:9
      

  2.   

    i > 5 ? i = 5 : i = 9;改成i > 5 ? i = 5 : (i = 9);就OK了
      

  3.   

     int i = xxx;
     i = i > 5 ? 5 :9;
     规则而已。。
      

  4.   

    我学过c,c中表达式分两种:有副作用的和无副作用的,不管是哪一种在其后面加上“;”就构成了语句。尽管无副作用的表达式语句做为单独的一条语句没意义,比如:“3+6;”,但是c/c++编译器可以接受,java编译器却无法接受。我想知道这不能接受的原因,是出于什么样的考虑。
    同样的这一条语句“i > 5 ? i = 5 : i = 9;”在c/c++中是能通过编译的,java中依然不行,这是为什么??
      

  5.   

    因为JAVA不是C...这就没必要多讨论了
    你会跑到美国去说,为什么你们不收人民币啊,我在天朝就收的?用JAVA,当然是遵守JAVA的编码规则了...
      

  6.   


    这不一样吧!
    既然java不支持这样的编码形式,一定有其设计上的考虑,我只是想知道为什么java剔除了这样的语句,出于什么样的原则。
      

  7.   

    刚才回复错了。这不一样吧!
    既然java不支持这样的编码形式,一定有其设计上的考虑,我只是想知道为什么java剔除了这样的语句,出于什么样的原则。
      

  8.   

    在C中,a=b 是个表达式,好象叫赋值表达式,而在JAVA中,这是个语句。所以,在C中,写 if (a=b) 最多警告你一下,而在JAVA中是不能通过编译的。正因为C中有这种东西,所以,在C中你可以写 
    a=b=c=d;
    java 里面是没有的。同样道理,i > 5 ? i = 5 : i = 9;
    这个在C中,i=5,i=9都被看作表达式,而在java中是没有赋值表达式这样嘀东东。所以是不合语法。
      

  9.   

    "if (a=b) 最多警告你一下,而在JAVA中是不能通过编译的。"
    如果a和b都不是boolean类型的话,java中无法编译通过,这是因为java不支持对布尔类型的隐式转换,只所以这样是为了避免因误写带来的逻辑错误。如果a和b都是布尔类型是没问题的。
    a = b是表达式,产生值,所以可以当成右值,不管是在java还是c中都可以c = a = b;
      

  10.   

    纠正一下:
    i > 5 ? i = 5 : i = 9; 关于这条语句,我想表达的意思是这样:
    i > 5 ? (i = 5) : (i = 9);
    或是直接这样: i > 5 ? 5 :  9;
      

  11.   

    我总结一下吧:
    不管是3 + 6; 还是i > 5 ? (i = 5) : (i = 9和i > 5 ? 5 : 9;
    它们都有某些共同的得点,即求值过程的最后一步都是非右值运算符产生的。
    所以我得到结论:java支持的表达式语句是c的子集,其中不支持的表达式集合为:{求值过程的最后一步是非右值运算符产生的表达式。}可能总结的不对,欢迎大家指正。
      

  12.   

    我想我得到答案了。就在刚才我写代码的时候,写了这样一段:
    if(in == current)
       current == null;
    很明显我想表达的逻辑是这样:
    if(in == current)
       current = null;
    如果在c中我在成坨的代码中发现这么一个小问题,可想而知是很费神的,java因为不支持这样的语句,所有编译器帮我找出了错误。
    我好像听到了java语言的设计者这样说:嗨,哥们,很明显你不知道自己在做什么,你是很容易犯错误的,所有让我来帮你找出错误吧。