劳驾帮助新手看程序

xx314327475 2010-03-13 05:09:58

public class YunSuanFu
{
public static void main(String abc[])
{
int i = 1;
int i2 = (i == 0 ? (i > 1 ? ++ i : -- i ) : 9);
System.out.println(i2);
}
}


为何是9?
据说不是算法不是由内而外计算的么?
我觉得应该是0啊~
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanbosen 2010-03-13
  • 打赏
  • 举报
回复
答案就是9 啊。
三目运算符啊。。。。
java55369618 2010-03-13
  • 打赏
  • 举报
回复
二楼是正确的? :是右结合先算右边的

可以去看看java的运算顺序的优先性
xx314327475 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 musiclee 的回复:]
纠错
2楼说的 “不必在意这些 编译器的编译方式,”其实对于java来说”编译标准“是不存在的 因为java编译的标准是固定的,(但对于c、或c++之类的语言编译标准就不一定了。。)
[/Quote]

很好很专业~
musiclee 2010-03-13
  • 打赏
  • 举报
回复
纠错
2楼说的 “不必在意这些 编译器的编译方式,”其实对于java来说”编译标准“是不存在的 因为java编译的标准是固定的,(但对于c、或c++之类的语言编译标准就不一定了。。)
bbb332 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yerui627 的回复:]
int i = 1;
int i2 = (i == 0 ? (i > 1 ? ++ i : -- i ) : 9);
先算的是i == 0 ,不等于0,i2=9
如果等于0才进行 (i > 1 ? ++ i : -- i )运算啊
[/Quote]..
musiclee 2010-03-13
  • 打赏
  • 举报
回复
其实楼主大可不必在意这些 编译器的编译方式,怕出错就分开写。
非要解释这题 我想应该是这样的。。。
首先: java是从右到左的编译 则
首先 对于(i > 1 ? ++ i : -- i ) 你完全可以把它想象成一个函数 f= (a>1?b;c)那么从右分别赋值为c=1(--i),b=0(++i),a=1(此时i=1) 则返回 f=0
然后: 判断( i==0 ?f:9 )当然为false 所以返回 i2=9
yerui627 2010-03-13
  • 打赏
  • 举报
回复
int i = 1;
int i2 = (i == 0 ? (i > 1 ? ++ i : -- i ) : 9);
先算的是i == 0 ,不等于0,i2=9
如果等于0才进行 (i > 1 ? ++ i : -- i )运算啊

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧