A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

编程三个整数a,b,c;用条件运算符求出他们的最大值

两个的我会,三个四个就不会了

max=a>b?a:b;   这是两个的写法。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 看看大家的回答!

查看全部评分

10 个回复

倒序浏览
黑马网友  发表于 2011-9-7 12:32:05
沙发
这个都不懂?max = a>b ? a>c?a:c : b>c?b:c;懂不?
回复 使用道具 举报

回复 楼主 的帖子

max = a>b ?( a>c?a:c) : ( b>c?b:c);
如果a>b就让a和c比较a>c?a:c
否则 b>c?b:c
这样就拆分为三个条件表达式了.
[ 本帖最后由 李治 于 2011-09-07  13:05 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-7 16:22:33
板凳
max = a>b ? a>c?a:c : b>c?b:c;与max = a>b ?( a>c?a:c) : ( b>c?b:c); 运算结果都正确
为了便于阅读,把括号里面的条件表达式分别当做两个整体,而在java语言里面,除了本身,没有其它操作符与?:具有相同优先级,那么在运算的先后顺序关系上,为了与其他符号的结合性表述保持一致,必然也要承认?:的结合性是从右到左的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
呵呵,这个问题的话,还是先弄明白max=a>b?a:b;这种写法的含义吧

max=a>b?a:b;这种写法,其实就是一种简化的if/else写法,我先写一段等价的代码吧:[code=java]if (a>b) {    //如果a>b条件成立
  max = a;    //则max等于冒号前面的值
} else {      //如果a>b条件不成立
  max = b;    //则max等于冒号后面的值
}[/code]所以,在a>b?a:b这个语句中
"?"就等价于if语句,":"就等价于else语句

为了加深对上面两句话的理解,我们现在来看看你的问题吧~
如果你想要对a,b,c三个数字进行排序,又对这种?:的表达方式不太熟悉的话
就可以先写出来等价的if/else语句来进行排序,像这样[code=java]//首先将a和b做比较
if(a>b) {      //如果a>b,也就是a比较大的话
  if(a>c) {    //则继续用较大的值(a)和c进行比较
    max = a;   //如果a>c,则max=a
  } else {
    max = c;   //如果a<=c,则max=c
  }
} else {       //如果a不大于b,也就是b比较大的话
  if (b>c) {   //则继续用较大的值(b)和c进行比较
    max = b;   //如果b>c,则max=b
  } else {
    max = c;   //如果b<=c,则max=c
  }
}[/code]上面这段代码可以看懂吧?那么现在就来翻译一下吧:
每当遇到一个if的时候,我们就往if的表达式后面加个?号
每当遇到一个else的时候,我们就看成是一个:号
于是,把上面这段代码中的每句话翻译出来,就是下面这样[code=java]//首先将a和b做比较
if(a>b) {      //a>b?
  if(a>c) {    //a>c?
    max = a;   //a
  } else {     //:
    max = c;   //c
  }
} else {       //:
  if (b>c) {   //b>c?
    max = b;   //b
  } else {     //:
    max = c;   //c
  }
}[/code]然后,把注释的部分从上到下依次连接起来,就是:
max = a>b ? a>c?a:c : b>c?b:c
这也就是黄伟龙童鞋的答案了~

为了可读性更好一些,我们还可以往表达式中间加一些括号
max = a>b ? (a>c?a:c) : (b>c?b:c)
这样再看起来就更清楚一些了

Tips:其实,a>b?a:b这样的写法,虽然看起来很高端
但实际上是一种可读性并不太强的写法(可读性就是代码容不容易让人看懂)
所以在以后的编程过程中,还是不要提倡这种写法比较好
因为以后在任何稍微大一些的项目中,代码最重要的要求之一就是:可读性好
[ 本帖最后由 李叶 于 2011-09-07  16:32 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不错D童鞋!

查看全部评分

回复 使用道具 举报
max=a>b?a: (b>a? b:a+b);         
max=a>b?(a+b==5 ? a:b):b;          加个括号,,看起来其实就是2步的

max=a>b?a:a>b+1?a:a>b+2?a:b;       这个看起来长,,下面加括号
max=a>b?a: ( a>b+1?a :  (a>b+2?a:b ) ) ;        加了括号看起来舒服了。。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-8 11:49:27
7#
就是嵌套使用条件运算符了,多写代码就会使用了
a>b?a>c?a:c:b>c?b:c
回复 使用道具 举报
黑马网友  发表于 2011-9-8 11:56:53
8#
我也想来抢分的,但是大家都回答了。 我就随便说两句吧。

其实三目运算符  就是if else 语句的简写,李叶同学已经说过了。

我想说的就是,当你的if else多了之后,不要去用三目运算符来求最大值,可以单独写一个方法,然后在需要的时候调用就好,代码的简洁性和复用是很重要的。
回复 使用道具 举报
int max=(a>b?a:b)?c:(a>b?a:b):c

a>b?a:b  取出一个最大数和c去比较,
如果比c大为true就返回a>b?a:b其中一个数,否则为false返回C.....

just do it
回复 使用道具 举报
int max=(a>b?a:b)?c:(a>b?a:b):c

a>b?a:b  取出一个最大数和c去比较,
如果比c大为true就返回a>b?a:b其中一个数,否则为false返回C.....

just do it   加油
回复 使用道具 举报
int max=((a>b?a:b)?c):(a>b?a:b):c

a>b?a:b  取出一个最大数和c去比较,
如果比c大为true就返回a>b?a:b其中一个数,否则为false返回C.....

just do it   加油   兄弟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马