所以我有这个非常长的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);
}
}
}}}
这只是其中的一部分,我不知道如何缩短它。
答案 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
,您可以决定使用c
和d
索引到该数组中的哪个元素,并最终得到如下内容:
playersArray[c][d].setIcon(currentIcon);