- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
if (carCountNumber != null && carCountNumber == 1)
{
if (yearsOld <= 3)
{
if (volume <= 1500)
{
return volume * 0.6;
}
else if (volume > 1500 && volume <= 2500)
{
return volume * 0.7;
}
else if (volume > 2500)
{
return volume * 0.75;
}
else
{
return -1.0;
}
}
else if (yearsOld > 3 && yearsOld <= 10)
{
if (volume <= 1500)
{
return volume * 0.35;
}
else if (volume > 1500 && volume <= 2500)
{
return volume * 0.4;
}
else if (volume > 2500)
{
return volume * 0.6;
}
else
{
return -1.0;
}
}
else if (yearsOld > 10 && yearsOld <= 14)
{
return volume * 0.75;
}
else if (yearsOld > 14)
{
return volume * 2;
}
else
{
return -1.0;
}
}
else if (carCountNumber >= 2)
{
if (yearsOld <= 3)
{
if (volume <= 2500)
{
return volume * 3.5;
}
else if (volume > 2500)
{
return volume * 5;
}
else
{
return -1.0;
}
}
else if (yearsOld > 3 && yearsOld <= 7)
{
if (volume <= 1000)
{
return volume * 0.85;
}
else if (volume > 1000 && volume < 1500)
{
return volume * 1;
}
else
{
return -1.0;
}
}
}
else
{
return -1.0;
}
можно... xD xD xD
стебитесь... )))
все? успокоились???
Теперь серъезно:
подскажите как избавиться от такого шиткода, может switch....case???
bildja 20.10.2009 12:57 # 0
carCountNumber != null && carCountNumber == 1 можно заменить на
carCountNumber == 1...
switch...case - это не для диапазонов, а точных значений....
не так сильно внимательно читал, но можно к примеру какую-нибудь табличку составить, по столбцу yearsOld, по строке volume - и внутри значения эти..
guest 20.10.2009 13:23 # 0
guest 20.10.2009 13:24 # 0
Oleg_quadro 20.10.2009 13:25 # 0
Barmaglot 20.10.2009 13:37 # +1
Для того чтобы избавится от нарезки if-ов используйте ассоциативные массивы. Применение хорошо описано у С.Макконела "Совершенный код".
вычисление volume по значению yearsOld лучше выделить в отдельные функции (внутренние код по отношению к выбор по carCountNumber), ибо 3-х мерный ассоциативный массив это тоже извращение :-)
guest 20.10.2009 14:55 # 0
Barmaglot 20.10.2009 16:28 # +1
Примерно так:
if (carCountNumber == 1)
return singleVolume(yearsOld);
else if(carCountNumber >= 2)
return multipleVolume(yearsOld);
else
// генерировать исключение EArgumentOutOfBound
TrueLauncher 20.10.2009 19:31 # 0
yearsOld, carCountNumber, volume.
А метод возвращает дабл переменную.
это Расчет растаможки автомобиля - берем год, номер автомобиля по счету который гоним за год, и его объем (куб.см.)
а на выходе кол-во EURO за растаможку!
Поэтому volume параметр не лишний!
Lexey 20.10.2009 20:18 # 0
Должен быть метод а-ля calcCoefficient(year, carCount), который считает коэффициент. Бабло после этого вычисляется одним умножением на полученный коэффициент (без размазывания этого умножения по куче мест).
guest 21.10.2009 09:35 # 0
где
year - год выпуска,
car_type - тип автомобиля (легковой, грузовой, трактор и т.д.),
owner_type - растаможивает юрлицо или физлицо,
volume - объем двигателя.
И еще там правило чуть сложнее, чем в этом коде наверху.
Lexey 21.10.2009 12:23 # 0
guest 21.10.2009 09:30 # 0
Было бы эффективней записать коэфициенты в массивы по типам транспорта и объему двигателя, чтобы не лазить по коду и менять алгоритмы, когда очередным постановлением правительство поменяет таможенные ставки., а просто подкорректировать данные в конфиге. Правда обычно они меняют и правила расчета :D.
Непонятно, что программист хотел здесь: return -1.0;
В общем, код некрасивый, мало в нем гармонии. Да и он уже почти как год устарел.
TrueLauncher 22.10.2009 12:35 # 0
Позже переделал, данные которые могут менятся снесены в конфиг...
Можно кусок кода с примером на массивы про которые вы говорите?
guest 22.10.2009 13:25 # +1
Код не покажу, ибо лень. Суть в том, что попарно сравниваем значения объемов, забитые в массиве, получаем индекс элемента с коэффициэнтом. Запарка не такая уж большая, вместо того чтобы громоздить тонну if..else. Ваше решение?
TrueLauncher 18.11.2009 14:06 # 0
guest 06.02.2015 21:21 # 0