Защо не сработва else?
При така написан calc - else на нa if (runcalculate.....)
не сработва. Ако else е на if (param.Length ==4)
сработва.
И при мен else не работеше :( Оправи се, като го преместих под if (param.Length == 4) и добавих още една проверка || _input.ToLower().Contains ("-п")) (без нея изкарваше съобщението за грешка след помощната информация). Така изглежда работещият код :)))
public void calc (string _input) { try { string [] param = _input.Split (' ');
if (param.Length > 1 && _input.ToLower().Contains ("-п"))
{
help ();
}
if (param.Length == 4 || _input.ToLower().Contains ("-п"))
{
}else{
_cl.Default (); Console.WriteLine ("Има грешно въведени параметри. С параметъра '-п' можете\nда видите синтаксиса на командата.\n");
}
double _result = 0;
if (runCalculate (param, out _result))
{
_cl.Default (); Console.Write ("Обемът на вдлъбнатия ъгъл е ");
_cl.Result (); Console.Write (_result.ToString ("N2"));
_cl.Default (); Console.WriteLine (" m3\n");
}
}catch{
}
}
А това е резултатът в конзолата :)
Според мен проблемът е в процедурите runCalculate и runCalculation. Те винаги връщат стойност за обем. Ако TryParse не успее, параметърът е 0, както е инициализиран. Ако са изпълнени условията за точната команда и параметри, трябва да се провери дали параметрите са по-големи от нула. Ако не са, ще се изпълни False на тези процедури. Проверката за броя на елементите на масива, получен от входния стринг, може да е също там. Тя е необходима, за да не се въведат повече от необходимия брой параметри. private bool runCalculation ( string[] _param, out double _result ) { try { double _a1 = 0, _b1 = 0, _a2 = 0, _b2 = 0, _h = 0; //_param[0] == Double.TryParse (_param [1], out _a1); Double.TryParse (_param [2], out _b1); Double.TryParse (_param [3], out _a2); Double.TryParse (_param [4], out _b2); Double.TryParse (_param [5], out _h);
if (_a1 > 0 && _a2 > 0 && _b1 > 0 && _b2 > 0 && _h > 0 && _param.Length==6) {
double F1 = _a1 * _b1, F2 = _a2 * _b2;
_result = _h * (F1 + F2) / 2;
return true;
}
} catch {
}
_result = 0;
return false;
}
еlse трябва да е извън скобите на този if(param.Length==4) т.е. да е алтернатива на вариант едно -ако при парсване дължината не е 4 и вариант две- да не съдържа помощ ако дължината е 4, но не се е парснал успешно то резултата ще е 0