2012-04-26 490 views
98

有关使用问号“?”的两个问题和打印功能括号内的冒号“:”运算符:它们做什么?另外,有没有人知道他们的标准术语或我可以找到更多关于他们的使用信息?我读过它们与'if''else'语句相似。什么是问号“?”和“冒号”:“操作员用于?

int row = 10; 
int column; 
while (row >= 1) 
{ 
    column = 1; 
    while(column <= 10) 
    { 
     System.out.print(row % 2 == 1 ? "<" : "\r>"); 
     ++column; 
    } 
    --row; 
    System.out.println(); 
} 
+8

仅供参考:三元运算符不是特定于java的。 – 2012-04-26 15:51:37

回答

241

这是ternary conditional operator,它可以在任何地方使用,而不只是打印语句。它有时被称为“三元运算符”,但是最常见的是it's not the only ternary operator

下面是来自维基百科展示它是如何工作的一个很好的例子:

传统的if-else构建C,Java和JavaScript写的是:

if (a > b) { 
    result = x; 
} else { 
    result = y; 
} 

这可以被改写为以下声明:

result = a > b ? x : y; 

基本上它采用以下形式:

boolean statement ? true result : false result; 

因此,如果布尔语句为true,则会得到第一部分,如果它为false,则会得到第二个部分。

尝试这些如果仍然没有任何意义:

System.out.println(true ? "true!" : "false."); 
System.out.println(false ? "true!" : "false."); 
+22

+1表示最后一个代码块。如果这不能解释事情,什么都不会。 – 2013-09-30 00:38:02

+5

三元运算符是指具有三个参数的任何运算符,因此这是* a *三元运算符,而不是*三元运算符。主要语言(C#,Java,PHP)认为它是* a *条件运算符,并将其称为*?:运算符。偶尔(JavaScript)它被称为*条件运算符。 – Sheepy 2014-05-30 08:02:54

+0

@Sheepy谢谢,我更新了答案。 – 2014-06-02 17:24:23

7

那是一个if/else语句equilavent到

if(row % 2 == 1){ 
    System.out.print("<"); 
}else{ 
    System.out.print("\r>"); 
} 
0

他们被称为三元运算符,因为他们是唯一一个在Java中。

到的差异if ... else结构是,它们返回的东西,而这个东西可以是任何东西:

int k = a > b ? 7 : 8; 
    String s = (foobar.isEmpty()) ? "empty" : foobar.toString(); 
1

它是一个三元运算符,并用简单的英语它指出"if row%2 is equal to 1 then return < else return /r"

1

也只是虽然我会发布的回答另一个相关的问题我有,

a = x ? : y; 

相当于:

a = x ? x : y; 

如果x为false或null,则取y的值。

+2

什么语言?不在Java中。 – iamnotmaynard 2013-08-05 22:15:40

+0

这可以但不是在java中。 – 2013-08-06 17:17:50

+0

我在Java中工作,是的,这是行不通的。 – 2014-02-12 06:23:05

2

也许它可以完美的例子为Android, 例如:

void setWaitScreen(boolean set) { 
    findViewById(R.id.screen_main).setVisibility(
      set ? View.GONE : View.VISIBLE); 
    findViewById(R.id.screen_wait).setVisibility(
      set ? View.VISIBLE : View.GONE); 
} 
3
a=1; 
b=2; 

x=3; 
y=4; 

answer = a > b ? x : y; 

answer=4因为条件为假需要y值。

问号(?)
。条件为真时使用的值

冒号(:)
。如果条件为假,则使用该值