Има ли някаква грешка в моя код?
В една от задачите за работа със стрингове се налага да проверим дали една дума(string) е Полиндром т.е дали е симитричен.
Реших да си напиша един метод,който да ми връща true или false в зависимост от това дали думата е полиндром или не е,но ide-to ми казва,че имало пътека,която не връщала стойност.Според мен такава няма.Къде е грешката?
Ето го и кода:
static bool IfPolidrom(string s)
{
for (int i = 0; i < s.Length / 2; i++)
{
if (s[i] == s[s.Length - 1])
{
if (i == s.Length / 2)
{
return true;
}
else
{
continue;
}
}
else
{
return false;
}
}
Трябва да върна true,но май не връщам нищо.
Явно съобщението,че има пътеки,които не връщат стойност е вярно.
Мерси за коментара.
Лек и успешен ден.
A може би връщам точно това,което трябва-а.
Има такава пътека, да. Единият else прави continue само, това е пътеката, която не връща стойност. Ако попадаш само в него, накраят методът няма да върне.
Това според мен няма как да се случи.Приемаме ,че подаваме стринг с краен брой елементи.Тогава неговата дължина също е крайно число.Проверките са ни точно s.Length/2.При това положение няма как да минаваме през continue .Или ще има елементи,които не са симитрични или итератора ще стигна до края на цикъла и ще върне True.
Лек и успешен ден.
Това може да е така на логическо ниво, но не и докато анализираш кода статично, каквото прави един компилатор (не пуска програмата с входни данни, за да компилира, все пак).
Подобен случай е, ако имаш следния метод:
Няма как стрингът да има под 0 дължина, обаче това няма как да бъде анализирано. Не пречи в някой момент във времето Length да върне -1, дори и до момента такава имплементация да няма. За това трябва да се обхване и обратният случай, въпреки че практически не съществува такъв. Методът по-горе няма да се компилира в това му състояние. Има пътека, която не връща стойност.
Да,може би си прав.Аз успях да подкарам метода,но коя точно пътека не връща стойност така и не разбрах.
Сколпа с continue определено не връща стойност.
Благодаря за коментара.
Лек и успешен ден.