Java 谁能给我解释一下这些代码吗?(i%2==0?)

Java 谁能给我解释一下这些代码吗?(i%2==0?),java,nested-if,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 ); 它似乎是两个嵌套的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 );
它似乎是两个嵌套的if语句,但有人能解释它背后的逻辑吗?它基本上使一个正方形变成白色,然后下一个正方形变成黑色,等等,8,8格,但我不理解逻辑。谢谢

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

i % 2 == 0 ? Color.black : Color.white
当循环通过时,我将在1和0之间交换,我理解。问号是如何使其从黑色变为白色的?

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

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

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

也许你在解释三元或三元结构时遇到了困难?在下面的语句中输入运算符

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

if (row == 0)  
   singleSquare.setBackground( i % 2 == 0 ? Color.black : Color.white );
这意味着,如果row==0,您可能会有row=i%2;在上面,使行在0和1之间交替,每隔一个正方形将为黑色,每隔一个正方形将为白色

对于row=1,大小写相同,但以白色开头

您可以阅读更多关于modulo%和Java的其他操作符的信息

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

singleSquare.setBackground(i % 2 == 0 ? Color.black : Color.white)
使用三元表达式,与

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

这是一个结合了模运算符的三元语句

三元结构:

状况?动作正确:动作错误

这将导致在您的情况下

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。

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

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


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

你还不明白什么?你是在问条件运算符吗?模?i%2==0检查i是奇数还是偶数。完美。我现在明白了。我以前从未见过三元语句。非常感谢,非常感谢。所有回答的人也是如此。