142

关于使用问号“?”的两个问题 和冒号“:”运算符在打印函数的括号内:它们做什么?另外,有谁知道它们的标准术语,或者我可以在哪里找到有关它们使用的更多信息?我读过它们类似于“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();
}
4

7 回答 7

310

这是三元条件运算符,它可以在任何地方使用,而不仅仅是打印语句。它有时被称为“三元运算符”,但它不是唯一的三元运算符,只是最常见的一种。

这是来自 Wikipedia 的一个很好的例子,展示了它是如何工作的:

用 C、Java 和 JavaScript 编写了一个传统的 if-else 结构:

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

这可以重写为以下语句:

result = a > b ? x : y;

基本上它采用以下形式:

boolean statement ? true result : false result;

因此,如果布尔语句为真,则得到第一部分,如果为假,则得到第二部分。

如果仍然没有意义,请尝试以下方法:

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");
于 2012-04-26T15:49:55.687 回答
10

那是一个 if/else 语句等价于

if(row % 2 == 1){
  System.out.print("<");
}else{
  System.out.print("\r>");
}
于 2012-04-26T15:50:05.273 回答
4
a=1;
b=2;

x=3;
y=4;

answer = a > b ? x : y;

answer=4由于条件为假,因此需要 y 值。

A question mark (?)
. The value to use if the condition is true

A colon (:)
. The value to use if the condition is false

于 2014-10-10T10:03:31.453 回答
3

同样,尽管我会发布我遇到的另一个相关问题的答案,

a = x ? : y;

相当于:

a = x ? x : y;

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

于 2013-02-19T00:11:57.540 回答
3

也许它可以成为 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);
}
于 2014-04-08T12:51:10.187 回答
1

它们被称为三元运算符,因为它们是 Java 中唯一的一种。

if...else 构造的不同之处在于,它们返回一些东西,而这个东西可以是任何东西:

  int k = a > b ? 7 : 8; 
  String s = (foobar.isEmpty ()) ? "empty" : foobar.toString (); 
于 2012-04-26T15:51:48.820 回答
1

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

于 2012-04-26T15:52:02.447 回答