有没有办法改变多个项目? [很难描述,里面的例子]

时间:2010-11-24 08:02:38

标签: java

我在如何将这一点连贯地写成单词方面有点挣扎,所以我只是使用一个例子并希望它能传达信息。

以奥赛罗(黑白棋)为例。我可以编写游戏背后的逻辑,也就是说我可以确定哪些棋子在每次转弯后都会改变颜色。

假设我在JFrame上有64个面板,每个面板代表奥赛罗板上的位置。转弯结束后,我确定面板5和6需要更换颜色。

我希望能够做的是通过数组传递5和6,比方说,并且有一个贯穿数组的for循环。

for(int i=0; i < array.length; i++){
   change the image at array[i]
}

因此,只检查并在2处进行更改,在此示例中,我需要更改的位置。节省了相当多的时间编写代码。

我目前要做的是有一个for循环,在for循环中我有64个if-else语句,说

if(panel == 5){
    change the image at 5
}
etc.

我希望这成功地解决了我想要问的问题。如果没有,我会非常乐意澄清。

4 个答案:

答案 0 :(得分:1)

您如何存储64个子面板?如果现有代码将面板称为0-63(或1 - 64)之间的数字,那么您可以将它们存储在一维数组中,然后您的代码可以是:

ImagePanel[] othelloPanels;

void changeImages(int[] indicies) {
    for (int i=0;i<indicies.length;i++) {
        othelloPanels[indicies[i]].change();
    }
}

我原本以为将它们存储为两个尺寸(8×8)阵列更有意义,但也许这只是我。

答案 1 :(得分:0)

这个怎么样:

void changeImages(Image[] images, Set<Integer> positionsToChange) {
    for (int i=0; i < array.length; i++){
        if (positionsToChange.contains(i)) {
            // change the image at array[i]
        }
    }
}

答案 2 :(得分:0)

根据abhin4v的回答:

void changeImages(Image[] images, Set<Integer> positionsToChange) {
    for (Integer index : positionsToChange) {
        // change the image at images[index]
    }
}

您可以在for循环中添加一些额外的检查,以确保您的索引位于数组的边界内,但如果您正确设置了Set,则没有必要。

答案 3 :(得分:0)

将您的面板放入地图中,以便轻松解决这些面板:

Map<Integer, PanelClass> panelsMap;

如果使用一维寻址,则Integer键是地图中面板的地址。当您的方法定义要更改的面板时,它应该返回一个数组或Iterable of Integer,然后执行以下操作:

for(Integer coord : getPanelIdsToChange()) {
   panelsMap.get(coord).doWhatYouWant();
}