如何编写嵌套的?:语句

时间:2015-07-13 16:28:20

标签: java syntax nested operators ternary-operator

我想通过使用?:(if-else-then)比较运算符来缩短我的代码,而不是使用不方便接管屏幕的传统if{}else{}块。我从未被告知过这个算子,我非常感谢有关如何在一行中嵌套多个比较的任何帮助。

这是我想缩短的代码:

if(y<0)
    y=0;
else
   if(y+h>s.getHeight())
        y = s.getHeight()-h;

我设法将每个条件压缩到此(不嵌套):

y = (y<0) ? 0 : y;
y = (y+h>s.getHeight()) ? s.getHeight()-h : y;

这是嵌套它的正确方法吗?

y = (y<0) ? 0 : ((y+h>s.getHeight()) ? s.getHeight()-h : y);

谢谢!

编辑:我收到了另一篇关于?:运算符的帖子的链接。 Link。但是,我的问题与嵌套有关,而不仅仅是简单的if语句。因此,我的问题不是该帖子的重复。

2 个答案:

答案 0 :(得分:1)

是的,这是正确的语法,但它不可读。

您可以在Java中自行检查。像这样:

int a = 3;
int b = 5;
String s = (a < b) ? "Less than b" : (a > b) ? "More than b" : "Equal as b";
System.out.println(s);

但是如果使用if和if else语句,代码更易读。这个 ?和:仅用于基本的if语句。 例如:

int a = 3;
int b = 5;
String s = (a == b) ? "Equal" : "Not equal"
System.out.println(s);

但即便在这种情况下,我宁愿使用if语句。我真的不喜欢看?和:而不是if语句:)

此致 golobic

答案 1 :(得分:0)

您已正确使用三元运算符。但是,您可以避免对s.getHeight()重复进行方法调用。

y = y < 0 ? 0 : y+h > s.getHeight() ? s.getHeight() - h : y;

如果使代码更具可读性,请使用?: (ternary) operator而不是if-then-else语句。

离。 result = someCondition ? value1 : value2;

如果value1,value2也是三元表达式,则可以进一步嵌套。

相关问题