黑马程序员技术交流社区
标题:
编程三个整数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