我可以简化这个循环吗?

时间:2013-12-24 19:20:54

标签: java refactoring

以下代码段来自生成5乘5的JButtons网格的系统。我需要迭代ArrayList JButtons并将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++;
        }           
    }

有什么方法可以提高质量或简化上面的代码段吗?

2 个答案:

答案 0 :(得分:4)

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 ...}

答案 1 :(得分:0)

你能不能:

col = row = 5;
for (int i = 0; i < col; i++) {
    for (int j = 0; j < row; j++) {
         curButton.addActionListener(new ButtonListener(i, j));
    }
}

可能必须使col和第6行或使i和j从不同的数字开始。