Исходный код имеет ненужное дублирование и по этой причине вы не должны пытаться копировать его как есть. Или, если вы хотите это сделать, вам нужно использовать длинный блок if-else
на Java, которого вы хотели избежать (и должны).
Вместо этого, я думаю, вам следует проанализировать основные (бизнес) логику и рефакторинг соответственно.
Что-то вроде:
// 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]
Мм да. Hashmap число. 12 -> 4000 18 -> 5000 или что-то еще, а затем вам нужно только два оператора if (для граничных случаев) и карточный вызов. – DejaVuSansMono
Nevermind, я думал, что уравнение одинаково для каждого, но это не – DejaVuSansMono