-4

我正在尝试完成一个创建棋盘布局的项目。唯一让我无法理解的部分是这条线

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

4 回答 4

4

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

三元结构:

健康)状况 ?动作真:动作假

这导致您的情况

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

或全写:

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

模数:

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

于 2014-01-20T19:57:15.203 回答
1

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

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

不等于零的其他行也将每隔一个点显示为黑色或白色。然而,对于偶数索引,它们将是白色的。

也许您在解释三元或 ? 以下语句中的运算符。

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

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

于 2014-01-20T19:55:46.983 回答
1
if (row == 0)  
   singleSquare.setBackground( i % 2 == 0 ? Color.black : Color.white );

这意味着如果row == 0(您可能有类似上面的内容,使行在和row = i % 2;之间交替),则每隔一个正方形将是黑色的,而每隔一个正方形将是白色的。 01

因为row = 1你有同样的情况,但从白色开始。

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

编辑
在 OP 的澄清后添加了以下内容:

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

使用三元表达式并且与

if (i % 2 == 0) {
    singleSquare.setBackground(Color.black);
} else {
    singleSquare.setBackground(Color.white);
}
于 2014-01-20T19:56:04.627 回答
0

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

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

所以在你的第一个例子中,假设i是棋盘列的索引,提供给 setBackground() 的值是Color.black什么时候i是偶数(因为i % 2 == 0),Color.white什么时候i是奇数(因为i % 2 != 0)。

于 2014-01-20T20:15:03.463 回答