コードに 2 つの "if" ステートメントがあります。1 つの "if" ステートメントが true の場合、もう 1 つのステートメントが自動的に無視または無効になるようにするにはどうすればよいですか?
3 に答える
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);
}
else
{ 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);
}
else{
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);
}
}
少なくとも2つの答えがあります。1つは、最初のステートメントの最後にreturnステートメントを配置することif
です。それは良い一般的な解決策ではないかもしれないので、私はそれが好きではありません。
もう1つの答えは、コードを少し再構築することです...
まず、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ステートメントの問題」を一番上に置くだけでした。
これで、2つの条件があります。1つはを処理しminValX
、もう1つはを処理しmaxValY
ます。しかし、それぞれの内容がほぼ同じであることがわかりました。コードを少しリファクタリングすることでこれを解決します(そして他の人に忍び込みます...):
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);
}
したがって、コードの3つのセクションはすべて、いくつかの定数を除いて基本的に同じであることがわかります。それらをリファクタリングすることで、デバッグする必要のあるコードの量を減らします。さらに、if
ステートメントの構造が明確にわかり、ロジックが実際の作業から分離されているため、追加の配当が頻繁に発生します。
したがって、次のようになります。
if(condition1){
block1;
}
if(condition2){
block2;
}else{
block3;
}
秒を無効/無視するには、ステートメントをif
使用できます。else if
if(condition1){
block1;
} else if(condition2){
block2;
}else{
block3;
}
または return ステートメントの後にblock1
if(condition1){
block1;
return;
}
if(condition2){
block2;
}else{
block3;
}