我得到了这个非常长的Java代码,我不知道如何缩短它

时间:2013-11-17 12:05:07

标签: java

所以我有这个非常长的Java代码,占用了2000行,就像我必须重复很多次的代码一样。有没有办法写这个更短的?

for(int d=0;d<6;d++) {
            for(int c=0;c<2;c++) {
                if(players[d][c].contains ("SA")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(SA);
                        } else if(c==1) {
                            p1b.setIcon(SA);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(SA);
                        } else if(c==1) {
                            p2b.setIcon(SA);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(SA);
                        } else if(c==1) {
                            p3b.setIcon(SA);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(SA);
                        } else if(c==1) {
                            p4b.setIcon(SA);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(SA);
                        } else if(c==1) {
                            p5b.setIcon(SA);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(SA);
                        } else if(c==1) {
                            p6b.setIcon(SA);
                        }
                    }
                } else if(players[d][c].contains ("S2")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S2);
                        } else if(c==1) {
                            p1b.setIcon(S2);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S2);
                        } else if(c==1) {
                            p2b.setIcon(S2);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S2);
                        } else if(c==1) {
                            p3b.setIcon(S2);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S2);
                        } else if(c==1) {
                            p4b.setIcon(S2);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S2);
                        } else if(c==1) {
                            p5b.setIcon(S2);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S2);
                        } else if(c==1) {
                            p6b.setIcon(S2);
                        }
                    }
                } else if(players[d][c].contains ("S3")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S3);
                        } else if(c==1) {
                            p1b.setIcon(S3);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S3);
                        } else if(c==1) {
                            p2b.setIcon(S3);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S3);
                        } else if(c==1) {
                            p3b.setIcon(S3);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S3);
                        } else if(c==1) {
                            p4b.setIcon(S3);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S3);
                        } else if(c==1) {
                            p5b.setIcon(S3);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S3);
                        } else if(c==1) {
                            p6b.setIcon(S3);
                        }
                    }
                } else if(players[d][c].contains ("S4")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S4);
                        } else if(c==1) {
                            p1b.setIcon(S4);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S4);
                        } else if(c==1) {
                            p2b.setIcon(S4);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S4);
                        } else if(c==1) {
                            p3b.setIcon(S4);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S4);
                        } else if(c==1) {
                            p4b.setIcon(S4);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S4);
                        } else if(c==1) {
                            p5b.setIcon(S4);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S4);
                        } else if(c==1) {
                            p6b.setIcon(S4);
                        }
                    }
                } else if(players[d][c].contains ("S5")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S5);
                        } else if(c==1) {
                            p1b.setIcon(S5);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S5);
                        } else if(c==1) {
                            p2b.setIcon(S5);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S5);
                        } else if(c==1) {
                            p3b.setIcon(S5);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S5);
                        } else if(c==1) {
                            p4b.setIcon(S5);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S5);
                        } else if(c==1) {
                            p5b.setIcon(S5);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S5);
                        } else if(c==1) {
                            p6b.setIcon(S5);
                        }
                    }
                } else if(players[d][c].contains ("S6")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S6);
                        } else if(c==1) {
                            p1b.setIcon(S6);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S6);
                        } else if(c==1) {
                            p2b.setIcon(S6);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S6);
                        } else if(c==1) {
                            p3b.setIcon(S6);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S6);
                        } else if(c==1) {
                            p4b.setIcon(S6);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S6);
                        } else if(c==1) {
                            p5b.setIcon(S6);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S6);
                        } else if(c==1) {
                            p6b.setIcon(S6);
                        }
                    }
                } else if(players[d][c].contains ("S7")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S7);
                        } else if(c==1) {
                            p1b.setIcon(S7);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S7);
                        } else if(c==1) {
                            p2b.setIcon(S7);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S7);
                        } else if(c==1) {
                            p3b.setIcon(S7);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S7);
                        } else if(c==1) {
                            p4b.setIcon(S7);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S7);
                        } else if(c==1) {
                            p5b.setIcon(S7);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S7);
                        } else if(c==1) {
                            p6b.setIcon(S7);
                        }
                    }
                } else if(players[d][c].contains ("S8")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S8);
                        } else if(c==1) {
                            p1b.setIcon(S8);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S8);
                        } else if(c==1) {
                            p2b.setIcon(S8);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S8);
                        } else if(c==1) {
                            p3b.setIcon(S8);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S8);
                        } else if(c==1) {
                            p4b.setIcon(S8);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S8);
                        } else if(c==1) {
                            p5b.setIcon(S8);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S8);
                        } else if(c==1) {
                            p6b.setIcon(S8);
                        }
                    }
                } else if(players[d][c].contains ("S9")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S9);
                        } else if(c==1) {
                            p1b.setIcon(S9);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S9);
                        } else if(c==1) {
                            p2b.setIcon(S9);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S9);
                        } else if(c==1) {
                            p3b.setIcon(S9);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S9);
                        } else if(c==1) {
                            p4b.setIcon(S9);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S9);
                        } else if(c==1) {
                            p5b.setIcon(S9);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S9);
                        } else if(c==1) {
                            p6b.setIcon(S9);
                        }
                    }
                } else if(players[d][c].contains ("S10")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(S10);
                        } else if(c==1) {
                            p1b.setIcon(S10);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(S10);
                        } else if(c==1) {
                            p2b.setIcon(S10);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(S10);
                        } else if(c==1) {
                            p3b.setIcon(S10);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(S10);
                        } else if(c==1) {
                            p4b.setIcon(S10);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(S10);
                        } else if(c==1) {
                            p5b.setIcon(S10);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(S10);
                        } else if(c==1) {
                            p6b.setIcon(S10);
                        }
                    }
                } else if(players[d][c].contains ("SJ")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(SJ);
                        } else if(c==1) {
                            p1b.setIcon(SJ);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(SJ);
                        } else if(c==1) {
                            p2b.setIcon(SJ);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(SJ);
                        } else if(c==1) {
                            p3b.setIcon(SJ);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(SJ);
                        } else if(c==1) {
                            p4b.setIcon(SJ);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(SJ);
                        } else if(c==1) {
                            p5b.setIcon(SJ);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(SJ);
                        } else if(c==1) {
                            p6b.setIcon(SJ);
                        }
                    }
                } else if(players[d][c].contains ("SQ")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(SQ);
                        } else if(c==1) {
                            p1b.setIcon(SQ);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(SQ);
                        } else if(c==1) {
                            p2b.setIcon(SQ);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(SQ);
                        } else if(c==1) {
                            p3b.setIcon(SQ);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(SQ);
                        } else if(c==1) {
                            p4b.setIcon(SQ);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(SQ);
                        } else if(c==1) {
                            p5b.setIcon(SQ);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(SQ);
                        } else if(c==1) {
                            p6b.setIcon(SQ);
                        }
                    }
                } else if(players[d][c].contains ("SK")) {
                    if(d==0){
                        if(c==0) {
                            p1a.setIcon(SK);
                        } else if(c==1) {
                            p1b.setIcon(SK);
                        }
                    } else if(d==1) {
                        if(c==0) {
                            p2a.setIcon(SK);
                        } else if(c==1) {
                            p2b.setIcon(SK);
                        }
                    } else if(d==2) {
                        if(c==0) {
                            p3a.setIcon(SK);
                        } else if(c==1) {
                            p3b.setIcon(SK);
                        }
                    } else if(d==3) {
                        if(c==0) {
                            p4a.setIcon(SK);
                        } else if(c==1) {
                            p4b.setIcon(SK);
                        }
                    } else if(d==4) {
                        if(c==0) {
                            p5a.setIcon(SK);
                        } else if(c==1) {
                            p5b.setIcon(SK);
                        }
                    } else if(d==5) {
                        if(c==0) {
                            p6a.setIcon(SK);
                        } else if(c==1) {
                            p6b.setIcon(SK);
                        }
                    }
                }}}

这只是其中的一部分,我不知道如何缩短它。

4 个答案:

答案 0 :(得分:3)

我首先将变量p1a通过p6b替换为“小部件”数组......或者它们是什么。然后重构索引数组以获取其图标将被设置的小部件。

答案 1 :(得分:2)

据我所知,你的players只是一个字符串数组。它应该是一个

的数组
class Player {
   String name;
   Widget widget;
}

或类似的,你应该有一个

Map<String, Icon> icons

你要去哪里

for (Map.Entry<String, Icon> e : icons)
   if (players[d][c].name.contains(e.getKey()))
      players[d][c].widget.setIcon(e.getValue());
然后,这将取代你现在拥有的整个巨大的ifology级联。

答案 2 :(得分:1)

  

所以我正在进行这个扑克游戏,它必须显示每个玩家都有哪张牌。我已经有一个随机生成所有玩家卡的代码,我只是在这里将图标设置为正确的卡片。我使用12张JLabel作为牌(p1a~p6b),玩家[d] [c]包含生成的牌。

首先,让我们选择一个合适的数据结构。对于类型安全,我们希望有一个专用的卡类型。由于这组值很小并且在编译时已知,因此枚举是不错的选择:

enum Card {
    SA, S2, S3, S4, S5, S6, S7, S8, S9, S10, SJ, SQ, SK;
}

有了这个,我们可以将手牌代表卡阵列:

Card[][] hand;

为了显示,我们有

JLabel[][] labels;

我们还需要一个地方来保留每张卡的图标。如果卡片本身知道它的图标,这是最简单的:

enum Card {
    SA, S2, S3, S4, S5, S6, S7, S8, S9, S10, SJ, SQ, SK;

    Icon icon = readIconFor(name());
}

我们可以这样做:

void show(Card[][] hands) {
    for (int playerId = 0; playerId < 2; playerId++) {
        for (int i = 0; i < 6; i++) {
            labels[playerId][i].setIcon(hand[playerId][i].icon);
        }
    }
}

答案 3 :(得分:0)

所以你在一个对象上调用setIcon()并传入一个参数。其余的代码只是决定哪个对象,以及哪个参数。

如果您对要传递的参数做出一个决定,请将其放入变量中,然后传递变量,这样就不需要重复来获取另一个变量。我们称之为currentIcon

我们对对象的组织方式知之甚少。他们是(或者他们可能在)阵列吗?您可以决定哪个数组元素包含要调用该方法的对象,而不是决定执行哪些代码。如果他们全都在,例如playersArray,您可以决定使用cd索引到该数组中的哪个元素,并最终得到如下内容:

playersArray[c][d].setIcon(currentIcon);