我可以简化这个 for 循环吗?
Posted
技术标签:
【中文标题】我可以简化这个 for 循环吗?【英文标题】:Can I simplify this for loop? 【发布时间】:2014-01-12 23:43:02 【问题描述】:以下代码段来自生成 5 x 5 网格的 JButton 的系统。我需要遍历JButtons
的ArrayList
并将JButton
的行和列传递给ButtonListener
的构造函数。代码当前显示在下面的方式有效,但我想知道是否可以完全清理代码或以任何方式重新考虑。我似乎有很多关于尝试构建网格的说明。
int row = 1, col = 1;
for (JButton curButton : view.getButtons())
curButton.addActionListener(new ButtonListener(row, col));
row++;
if (row > 5)
row = 1;
col++;
有什么办法可以提高质量或简化上述代码段?
【问题讨论】:
为什么不直接使用带有i
和j
的传统双循环而不是row
和col
? 编辑:如果你愿意,它们可以继续被称为 row
和 col
,并且仍然可以使用双 for 循环正确递增
【参考方案1】:
int iterator = 0;
for (JButton curButton : view.getButtons())
curButton.addActionListener(new ButtonListener(iterator%5 + 1, iterator/5 + 1));
iterator++;
请注意,我使用的是整数除法,它总是向下取整。 iterator/5 + 1
会将 0,1,2,3,4,5,6,... 映射到 1,1,1,1,1,2,2...
【讨论】:
这似乎是最干净的解决方案。【参考方案2】:你不能:
col = row = 5;
for (int i = 0; i < col; i++)
for (int j = 0; j < row; j++)
curButton.addActionListener(new ButtonListener(i, j));
可能必须使 col 和 row 6 或 i 和 j 从不同的数字开始。
【讨论】:
这不允许将新的ButtonListener
添加到view.getButtons()
中的每个JButton
。以上是关于我可以简化这个 for 循环吗?的主要内容,如果未能解决你的问题,请参考以下文章
JDK1.8新特性Lambda表达式简化if-else里都有for循环的优化方式