Софтуерно Инженерство
Loading...
+ Нов въпрос
tedimarkova avatar tedimarkova 6 Точки

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

Здравейте, 

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

http://pastebin.com/zwSC00vt

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

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

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

Благодаря.

 

Тагове:
0
Основи на програмирането 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