黑马程序员技术交流社区

标题: 编程三个整数a,b,c;用条件运算符求出他们的最大值 [打印本页]

作者: 石欣欣    时间: 2011-9-7 12:07
标题: 编程三个整数a,b,c;用条件运算符求出他们的最大值
编程三个整数a,b,c;用条件运算符求出他们的最大值

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

max=a>b?a:b;   这是两个的写法。
作者: 匿名    时间: 2011-9-7 12:32
这个都不懂?max = a>b ? a>c?a:c : b>c?b:c;懂不?
作者: 李治    时间: 2011-9-7 12:59
标题: 回复 楼主 的帖子
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 编辑 ]
作者: 匿名    时间: 2011-9-7 16:22
max = a>b ? a>c?a:c : b>c?b:c;与max = a>b ?( a>c?a:c) : ( b>c?b:c); 运算结果都正确
为了便于阅读,把括号里面的条件表达式分别当做两个整体,而在java语言里面,除了本身,没有其它操作符与?:具有相同优先级,那么在运算的先后顺序关系上,为了与其他符号的结合性表述保持一致,必然也要承认?:的结合性是从右到左的。
作者: 李叶    时间: 2011-9-7 16:26
呵呵,这个问题的话,还是先弄明白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 编辑 ]
作者: 石宗银    时间: 2011-9-8 10:24
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 ) ) ;        加了括号看起来舒服了。。
作者: 匿名    时间: 2011-9-8 11:49
就是嵌套使用条件运算符了,多写代码就会使用了
a>b?a>c?a:c:b>c?b:c
作者: 匿名    时间: 2011-9-8 11:56
我也想来抢分的,但是大家都回答了。 我就随便说两句吧。

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

我想说的就是,当你的if else多了之后,不要去用三目运算符来求最大值,可以单独写一个方法,然后在需要的时候调用就好,代码的简洁性和复用是很重要的。
作者: 张林春    时间: 2012-4-23 21:28
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
作者: 张林春    时间: 2012-4-23 21:30
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   加油
作者: 张林春    时间: 2012-4-23 21:30
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   加油   兄弟




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2