我想通过使用?:
(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语句。因此,我的问题不是该帖子的重复。答案 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也是三元表达式,则可以进一步嵌套。