我得到了非常长的Java代码,我不知道';我不知道如何缩短它
所以我有一个非常长的Java代码,它占用了2000行,就像我必须重复很多次的代码一样。有没有办法把这个写得更短我得到了非常长的Java代码,我不知道';我不知道如何缩短它,java,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) {
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);
}
}
}}}
for(int d=0;d我首先将变量p1a
通过p6b
替换为一个“小部件”数组…或任何它们是什么。然后重构数组索引以获得要设置图标的小部件。我首先将变量p1a
通过p6b
替换为一个“小部件”数组…或其他任何内容。然后重构以索引数组以获取要设置图标的小部件。因此,您正在对对象调用setIcon(),并传入一个参数。剩下的代码只是决定哪个对象和哪个参数
如果您对要传递的参数做了一个决定,将其放入一个变量中,然后传递该变量,这样就不必重复获取另一个变量。我们称之为currentIcon
我们对对象的组织方式了解不够。它们在(或可能在)吗数组?您可以决定哪个数组元素包含要调用该方法的对象,而不是决定要执行的代码。如果它们都在,比如说,playersArray
,您可以决定哪个元素,使用c
和d
索引到该数组中,最后得到如下结果:
playersArray[c][d].setIcon(currentIcon);
因此,您正在对一个对象调用setIcon(),并传入一个参数。剩下的代码只是决定哪个对象和哪个参数
如果您对要传递的参数做了一个决定,将其放入一个变量中,然后传递该变量,这样就不必重复获取另一个变量。我们称之为currentIcon
我们对对象的组织方式了解不够。它们在(或可能在)吗数组?您可以决定哪个数组元素包含要调用该方法的对象,而不是决定要执行的代码。如果它们都在,比如说,playersArray
,您可以决定哪个元素,使用c
和d
索引到该数组中,最后得到如下结果:
playersArray[c][d].setIcon(currentIcon);
就我所见,你的播放器
只是一个字符串数组。它应该是一个字符串数组
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());
for(Map.Entry e:图标)
if(players[d][c].name.contains(e.getKey()))
players[d][c].widget.setIcon(e.getValue());
这样就可以取代你现在拥有的整个庞大的ifology级联。就我所见,你的player
只是一个字符串数组。应该是一个数组
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());
for(Map.Entry e:图标)
if(players[d][c].name.contains(e.getKey()))
players[d][c].widget.setIcon(e.getValue());
这将取代你现在拥有的整个巨大的生命科学级联
因此,我正在制作这个扑克游戏,它只需要显示每个玩家都有哪些牌。我已经有了一个随机生成所有玩家牌的代码,我只是在这里将图标设置为正确的牌。我使用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);
}
}
}
void show(卡片[]手){
对于(int-playerId=0;playerId<2;playerId++){
对于(int i=0;i<6;i++){
标签[playerId][i].setIcon(手动[playerId][i].icon);
}
}
}
因此,我正在制作这个扑克游戏,它只需要显示每个玩家都有哪些牌。我已经有了一个随机生成所有玩家牌的代码,我只是在这里将图标设置为正确的牌。我使用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);
}
}
}
void show(卡片[]手){
对于(int-playerId=0;playerId<2;playerId++){
对于(int i=0;i<6;i++){
标签[playerId][i].setIcon(手动[playerId][i].icon);
}
}
}
这不是很长。这真的很长。用于if d==0…5开关情况。要使p1a…p5a的内容更好,请将其放入数组中,以便可以像pa[5]一样对其进行迭代当然有办法查找“pxx”组件?它们不在某个列表中吗?为什么不在结构化的Arraylist中填充它们,并根据Arraylist设置图标?所以我正在制作这个扑克游戏,它只需要显示每个玩家都有哪些牌。我已经有了一个随机生成所有玩家牌的代码,我只是我在这里设置了正确的卡片图标。我使用了12个jlabel作为卡片(p1a~p6b),玩家[d][c]包含生成的卡片。这不是很长。这真的很长。用于if d==0…5开关情况。要使用p1a…p5a制作东西,最好将其放入一个数组中,这样你就可以像pa[5]一样迭代它当然有办法查找“pxx”组件吗?它们不在列表中吗