我正在尝试通过一个创建棋盘布局的项目。我无法理解的唯一部分就是这一行
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之间切换,因为我理解循环。问号是什么使它从黑色变为白色?
答案 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,它将替代地计算为true
和false
)。
答案 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;
之类的内容,让行在0
和1
之间交替),则每隔一个方格都是黑色,而其他每一个都是白人。
对于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
),i
为i % 2 != 0
。