元のコードには不要な重複があります。このため、そのままコピーしないでください。あるいは、それをやりたいのであれば、Javaで長いブロックif-else
を使用する必要があります。これは避けたい(そしてそうすべきです)。
代わりに、私は基礎となるビジネスロジックとリファクタを適切に分析する必要があると思います。
のような何か:コードの
// assumes the given integer values are positive
public static double calculate(int a, int c) {
final double coefficient = 1.1;
final int multiplier = 6;
final int increment = 500;
final int baseValue = 3000;
if (a < 12) {
return (baseValue + c) * coefficient;
}
if (a <= 36) {
// int division is truncated to nearest int value
int result = ((a/multiplier) * increment) + baseValue + c;
if (a % multiplier == 0) {
return result;
} else {
return result * coefficient;
}
}
throw new IllegalArgumentException("Invalid value for a (" + a + ")");
}
テストの実行:
public static void main(String... args) {
final int c = 100;
for (int a = 1; a < 37; a++) {
System.out.println("calculate a:[" + a + "] for c:[" + c + "]. Result: [" + String.format("%.2f", calculate(a, c)) + "]");
}
}
コンソール出力:
calculate a:[1] for c:[100]. Result: [3410,00]
calculate a:[2] for c:[100]. Result: [3410,00]
calculate a:[3] for c:[100]. Result: [3410,00]
calculate a:[4] for c:[100]. Result: [3410,00]
calculate a:[5] for c:[100]. Result: [3410,00]
calculate a:[6] for c:[100]. Result: [3410,00]
calculate a:[7] for c:[100]. Result: [3410,00]
calculate a:[8] for c:[100]. Result: [3410,00]
calculate a:[9] for c:[100]. Result: [3410,00]
calculate a:[10] for c:[100]. Result: [3410,00]
calculate a:[11] for c:[100]. Result: [3410,00]
calculate a:[12] for c:[100]. Result: [4100,00]
calculate a:[13] for c:[100]. Result: [4510,00]
calculate a:[14] for c:[100]. Result: [4510,00]
calculate a:[15] for c:[100]. Result: [4510,00]
calculate a:[16] for c:[100]. Result: [4510,00]
calculate a:[17] for c:[100]. Result: [4510,00]
calculate a:[18] for c:[100]. Result: [4600,00]
calculate a:[19] for c:[100]. Result: [5060,00]
calculate a:[20] for c:[100]. Result: [5060,00]
calculate a:[21] for c:[100]. Result: [5060,00]
calculate a:[22] for c:[100]. Result: [5060,00]
calculate a:[23] for c:[100]. Result: [5060,00]
calculate a:[24] for c:[100]. Result: [5100,00]
calculate a:[25] for c:[100]. Result: [5610,00]
calculate a:[26] for c:[100]. Result: [5610,00]
calculate a:[27] for c:[100]. Result: [5610,00]
calculate a:[28] for c:[100]. Result: [5610,00]
calculate a:[29] for c:[100]. Result: [5610,00]
calculate a:[30] for c:[100]. Result: [5600,00]
calculate a:[31] for c:[100]. Result: [6160,00]
calculate a:[32] for c:[100]. Result: [6160,00]
calculate a:[33] for c:[100]. Result: [6160,00]
calculate a:[34] for c:[100]. Result: [6160,00]
calculate a:[35] for c:[100]. Result: [6160,00]
calculate a:[36] for c:[100]. Result: [6100,00]
ええええと。 numをハッシュマップします。 12 - > 4000 18 - > 5000またはそれ以外の場合は、2つのif文(境界の場合)とマップ呼び出しが必要になります。 – DejaVuSansMono
気にしない、私は方程式がそれぞれ同じものだと思ったが、そうではなかった – DejaVuSansMono