条件式が複雑になったら場合分けする
IF文のネストは便利ではあるが多用しすぎると可読性の問題に加えて複雑さ故に予期せぬ動きやエラーを誘発しやすい。以下自分の失敗を掲載する。
3つの数の大小 int a; int b; int c; を比較し、最大の数を出力する式において、
if(a > b) {
if (a < c) {
System.out.println(c);
} else if(a>c) {
System.out.println(a);
} else {
System.out.println(a + c);
}
}
(原文どっか行った)
以下
if (a > c) ,if (a == b == c)と3つの場合について記述していたのだが、ごちゃごちゃとした式になるしそっちに気を取られてエラーにも気付かないしで散々だった。大体これだと総当りするせいでどの場合分けをしてどの場合分けをしてないのか書いてる途中でわからなくなる。
そこでb-aの変数baを用意し、
if (ba < 0) {
if (c < a) {
System.out.println("最大値は" + a);
} else if(c > a) {
System.out.println("最大値は" + c);
} else { System.out.println("最大値はaとc:" + a);
}
} if(ba > 0) {
if(b < c) {
System.out.println("最大値は" + c);
} else if(b > c) {
System.out.println("最大値は" + b);
} else {
System.out.println("最大値はbとc:" + b);
}
}
if(ba == 0) {
if(a == c) {
System.out.println("最大値はaとbとc:" + a);
} else {
System.out.println("最大値はaとb:" + a);
}
}
まぁ不格好ではあると思うがだいぶ見やすくなったし、分ける数も減って動きがわかりやすくなった。 という感じで全部ひとまとまりで表現しようとしないで分解するように心がけたい。