Loading...
tedimarkova avatar tedimarkova 6 Точки

Грешка при for - цикъл

Здравейте, 

Въпроса ми е следния:

http://pastebin.com/zwSC00vt

това са два, според мен, идентични метода. Разликата е в наличието на скоби за for - цикъла.

Не можах да разбера, защо ми дава грешка в единия случай, а в другия го приема за вярно.

Написала съм и грешките, които ми дава.

Благодаря.

 

Тагове:
0
Programming Basics 05/05/2016 13:36:34
vancho avatar vancho 430 Точки

Това значи, че никога няма да ти влезе цикъла в долния случай (на горния for), за това ти пише: Unreachable code detected.

В горния случай, return true е в for-a цикъла (ако го извадиш от цикъла ще заработи);

А в долния (for) е извън цикъла и за това минава този!

-1
05/05/2016 13:50:48
H.Stoyanov avatar H.Stoyanov 115 Точки

Колежке методите не са идентични. На втория метод в if имаш следната проверка

if (digits[i] != digits[digits.Length - i - 1])

А на първия:

if (digit[i] != digit[digit.Length / 2 - i - 1])

И по този начин, ти се образуват грешките, но като цяло не съм сигурен дали логиката ти е вярна. Най добре използвай дебъгера и проследи стъпка по стъпка (с F10) дали кода прави това, което искаш.

Хубав ден! wink

0
Nikola_Andreev avatar Nikola_Andreev 671 Точки

Ами в горния случай още при първото завъртане на цикъла връща true or false и цикъла никога не може да завърти повече от веднъж. Затова ти казва че i++ e unreachable.

Във втория случай работи, защото като ги няма скобите и ти приема че return e извън цикъла. Тоест като нямаш скоби във цикъла е само следващия ред, без долните редове. И тогава вече ще ти извърти целия цикъл и чак тогава ще ти върне резултат (ще достигне до return). Aкo можеш да дебъгваш, пусни  си го през дебъгера и ще ти стане по ясно.

 

0
05/05/2016 18:23:21
borislav9212 avatar borislav9212 745 Точки

Проблема e, че нямаш скоби на "if" , а не "for" цикъла. if прави проверката и ако е вярна казваш - върни ми false, ако не връща true. Без скобите няма разграничаване и програмата не знае какво да прави. Аз така го разбирам, Ако греша, някой да ме поправи.

0
vladimir.st.radoslavov avatar vladimir.st.radoslavov 29 Точки

Моят съвет е винаги да се използват къдрави скоби, това прави кода четлив и се избягват грешки освен ако не се изисква нещо специално. Логическото правилото за интерпретиране на кода е когато няма къдрави скоби е че се изпълнява / приема за следващ ред за изпълнение, единственно следващият оператор, или до следващият разделител ";" Първият пример операторът return в цикъла for винаги се изпълнява и се излиза след първото влизане вцикъла тоест не се стига до i++. При същият код и самата функция не винаги връща резултат защото няма стойност която се връща по подразбиране  верният код трябва да е нещо такова 

        static bool isPalindrome(int num)
        {
            string digit = num.ToString(); // Convert.ToString(num); // num.ToString();

            for (int i = 0; i < (digit.Length / 2); i++)
            {
                if (digit[i] != digit[digit.Length - i - 1])
                {
                    return false;
                }
            }
            return true;
        } 

 

1
05/05/2016 16:42:10
tedimarkova avatar tedimarkova 6 Точки

Благодаря на всички.

Разбрах си грешките. :)

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