我在如何将这一点连贯地写成单词方面有点挣扎,所以我只是使用一个例子并希望它能传达信息。
以奥赛罗(黑白棋)为例。我可以编写游戏背后的逻辑,也就是说我可以确定哪些棋子在每次转弯后都会改变颜色。
假设我在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.
我希望这成功地解决了我想要问的问题。如果没有,我会非常乐意澄清。
答案 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();
}