有人可以向我解释这段代码吗? (i%2 == 0?)

时间:2014-01-20 19:53:54

标签: java nested-if

我正在尝试通过一个创建棋盘布局的项目。我无法理解的唯一部分就是这一行

if (row == 0)
    singleSquare.setBackground( i % 2 == 0 ? Color.black : Color.white );

else if (row != 0)
    singleSquare.setBackground( i % 2 == 0 ? Color.white : Color.black );

它似乎是2个嵌套的if语句,但任何人都可以解释它背后的逻辑吗?它基本上使一个方形白色然后下一个方形黑色等和8,8网格但我无法理解逻辑。谢谢

编辑 - 应该更精确。这部分是什么意思?

i % 2 == 0 ? Color.black : Color.white

我会在1到0之间切换,因为我理解循环。问号是什么使它从黑色变为白色?

4 个答案:

答案 0 :(得分:2)

这是与模数运算符相结合的三元语句。

三元结构:

  

条件? action-true:action-false

这导致你的情况

i % 2 == 0 ? Color.black : Color.white 

或完全写完:

if(i % 2 == 0) {
    singleSquare.setBackground(Color.black);
} else {
    singleSquare.setBackground(Color.white);
}

<强>模量:

i % 2在将i除以2之后返回余数。在您的情况下,这将导致黑色和白色之间的交替(通过每次迭代添加1,它将替代地计算为truefalse)。

答案 1 :(得分:1)

i %2 == 0通常用于确定索引是否为偶数索引。

在您的示例中,这意味着第0行的偶数索引将设置为黑色。

其他行不等于零也会使其他每个点都是黑色或白色。然而,对于偶数指数,它们将是白色的。

也许你在解释三元组时遇到了麻烦?运营商在下面的声明中。

( i % 2 == 0 ? Color.black : Color.white )

基本上这就是说,如果条件i%2 == 0(索引是偶数),执行问号后面的第一条指令(将颜色设置为黑色),否则在冒号后面输出指令(设置颜色)到白色)。

答案 2 :(得分:1)

if (row == 0)  
   singleSquare.setBackground( i % 2 == 0 ? Color.black : Color.white );

这意味着,如果row == 0(您可能上面有row = i % 2;之类的内容,让行在01之间交替),则每隔一个方格都是黑色,而其他每一个都是白人。

对于row = 1,您的情况相同,但以白色开头。

您可以阅读有关模数(%)和Java的其他运算符here的更多信息。

修改
在OP澄清之后添加以下内容:

singleSquare.setBackground(i % 2 == 0 ? Color.black : Color.white)

使用三元表达式,与

相同
if (i % 2 == 0) {
    singleSquare.setBackground(Color.black);
} else {
    singleSquare.setBackground(Color.white);
}

答案 3 :(得分:0)

%是模数运算符。它产生除法运算的剩余部分。所以3 % 2 == 5

?被称为三元运算符。它可以用作if / else语句的简写类型。如果三元运算符左侧的部分求值为真,则使用紧跟在三元运算符之后的值。如果三元运算符左侧的部分计算为false,则使用第二个值(在:符号后面)。

因此,在您的第一个示例中,假设i是国际象棋棋盘列的索引,当Color.black为偶数时,提供给setBackground()的值为i(因为{当i % 2 == 0为奇数时(Color.white),ii % 2 != 0