至少有两个答案。一种是在第一个if 语句的底部放置一个return 语句。我不喜欢这样,因为它可能不是一个好的通用解决方案。
另一个答案是稍微重构你的代码......
首先,由于 maxValX >= 3 的情况似乎不是问题所在,我会通过反转第一个 if 条件来解决这个问题:
if (maxValY >= 3) {
p.setColor(Color.black);
//display the value of graph width and graph height
aw = String.valueOf(x1);
p.drawString("Graph Width = ", 50, 90);
p.drawString(aw, 150, 90);
p.drawString("Graph Height = ", 50, 110);
String ah = String.valueOf(y1);
p.drawString(ah, 156, 110);
} else if (maxValY < 3) {
p.setColor(Color.black);
//display the value of graph width and graph height
aw = String.valueOf(x1);
p.drawString("Graph Width = ", 740, 490);
p.drawString(aw, 840, 490);
p.drawString("Graph Height = ", 740, 510);
String ah = String.valueOf(y1);
p.drawString(ah, 846, 510);
}
if (minValx == -1 || minValx == -2 || minValx == -3) {
p.setColor(Color.black);
//display the value of graph width and graph height
aw = String.valueOf(x1);
p.drawString("Graph Width = ", 740, 90);
p.drawString(aw, 840, 90);
p.drawString("Graph Height = ", 740, 110);
String ah = String.valueOf(y1);
p.drawString(ah, 846, 110);
}
所以发生的只是我把“不重复的 if 语句问题”放在了顶部。
现在,我们有两个条件,一个处理minValX,一个处理maxValY。但是我们现在注意到每个的内容几乎相同。我们通过稍微重构代码来解决这个问题(并潜入 else...):
if (maxValY >= 3) {
p.setColor(Color.black);
//display the value of graph width and graph height
aw = String.valueOf(x1);
p.drawString("Graph Width = ", 50, 90);
p.drawString(aw, 150, 90);
p.drawString("Graph Height = ", 50, 110);
String ah = String.valueOf(y1);
p.drawString(ah, 156, 110);
} else if (maxValY < 3) {
q(491, 510);
} else if (minValx == -1 || minValx == -2 || minValx == -3) {
q(90, 110);
} else {
throw new RuntimeException("This cannot possibly happen ;-)");
}
}
private void q(int loc1, int loc2) {
p.setColor(Color.black);
//display the value of graph width and graph height
aw = String.valueOf(x1);
p.drawString("Graph Width = ", 740, loc1);
p.drawString(aw, 840, loc1);
p.drawString("Graph Height = ", 740, loc2);
String ah = String.valueOf(y1);
p.drawString(ah, 846, loc2);
}
然后我们注意到代码块仍然几乎相同。重构...
private void someName() {
// ...
if (maxValY >= 3) {
q(50, 90, 510);
} else if (maxValY < 3) {
q(740, 490, 510);
} else if (minValx == -1 || minValx == -2 || minValx == -3) {
q(740, 90, 110);
} else {
throw new RuntimeException("This cannot possibly happen ;-)");
}
// ...
}
private void q(int base, int graphWidth, int graphHeight) {
p.setColor(Color.black);
//display the value of graph width and graph height
aw = String.valueOf(x1);
p.drawString("Graph Width = ", base, graphWidth);
p.drawString(aw, base+100, graphWidth);
p.drawString("Graph Height = ", base, graphHeight);
String ah = String.valueOf(y1);
p.drawString(ah, base+100+6, graphHeight);
}
所以我们看到除了一些常量之外,所有三个部分的代码基本相同。通过重构它们,我们减少了必须调试的代码量。另外,if语句的结构我们看得一清二楚,逻辑与实际工作分离,经常产生额外的红利。