Java整数循环迭代的简写

时间:2016-01-31 13:39:05

标签: java iteration

编码时我发现自己 经常做以下事情:

corner++; 
if(corner == 4) corner = 0;

无论如何都要在一行中做到这一点吗?

在此示例中,角应为0,1,2,3,0,1,2,3,0 ......

5 个答案:

答案 0 :(得分:31)

您可以使用这种简短易懂的行(Demo):

corner = (corner + 1) % 4;

或者,甚至更短一点(Demo):

corner = ++corner % 4;

答案 1 :(得分:8)

使用余数。这是两条线,但干净。

corner++;
corner %= 4;

答案 2 :(得分:4)

你可以这样做:

corner = ++corner == 4 ? 0 : corner;

如果您的corner测试未通过,这样您就可以为corner == 4变量分配其他内容。

答案 3 :(得分:3)

我用:

if (++corner == 4) corner = 0;

答案 4 :(得分:1)

它不是那么明显的,而是更快,因为除法通常比任何按位操作执行得慢。

corner = ++corner & 3;

编辑:令人惊讶的是,我发现了一种更好的骑自行车方式 - 使用轮班,并且运行更快!

corner = ++corner << 30 >>> 30;

这个技巧只适用于任何2的力量。

This benchmark显示所有结果(虽然它是javascript,而不是java)