Loading...
krum_43 avatar krum_43 756 Точки

Има ли някаква грешка в моя код?

В една от задачите за работа със стрингове се налага да проверим дали една дума(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;
                }
            }

 

Тагове:
aquaruiz avatar aquaruiz 135 Точки

Ако думата ти е буква, какво връщаш?

т.е.

IfPolidrom("a");

0
01/11/2018 18:10:09
krum_43 avatar krum_43 756 Точки

Трябва да върна true,но май не връщам нищо.

Явно съобщението,че има пътеки,които не връщат стойност е вярно.

Мерси за коментара.

Лек и успешен ден.

0
krum_43 avatar krum_43 756 Точки

A може би връщам точно това,което трябва-а.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Има такава пътека, да. Единият else прави continue само, това е пътеката, която не връща стойност. Ако попадаш само в него, накраят методът няма да върне.

0
krum_43 avatar krum_43 756 Точки

Това според мен няма как да се случи.Приемаме ,че подаваме стринг с краен брой елементи.Тогава неговата дължина също е крайно число.Проверките са ни точно s.Length/2.При това положение няма как да минаваме през continue .Или ще има елементи,които не са симитрични или итератора ще стигна до края на цикъла и ще върне True.

Лек и успешен ден.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Това може да е така на логическо ниво, но не и докато анализираш кода статично, каквото прави един компилатор (не пуска програмата с входни данни, за да компилира, все пак).

Подобен случай е, ако имаш следния метод:

	static bool Test(string s) 
	{
		if (s.Length >= 0) 
		{
			return false;
		}
	}

Няма как стрингът да има под 0 дължина, обаче това няма как да бъде анализирано. Не пречи в някой момент във времето Length да върне -1, дори и до момента такава имплементация да няма. За това трябва да се обхване и обратният случай, въпреки че практически не съществува такъв. Методът по-горе няма да се компилира в това му състояние. Има пътека, която не връща стойност.

0
krum_43 avatar krum_43 756 Точки

Да,може би си прав.Аз успях да подкарам метода,но коя точно пътека не връща стойност така и не разбрах.

Сколпа с continue определено не връща стойност.

Благодаря за коментара.

Лек и успешен ден.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.