Задача "02. Vapor Store"
Здравейте колеги,
Искам да помоля за малко помощ относно следната задача. Judge ми дава 20/100, а тествайки трите примера от задачата изглежда, че работи но явно само така изглежда след като Judge не е съгласен :)
https://pastebin.com/WeUeihMQ
тук е условието:
https://judge.softuni.bg/Contests/580/CSharp-Basics-More-Exercises
Много благодаря колега, така се получава!
Икам да попитам какво се променя в алгоритама, че след като се инициализира вътре в while цикъла дава 100/100, а извън него 20/100. Немога да схвана самият смисъл?
Също така искам да попитам ако ми дава грешки в тестовете след нулевият като 2, 3, 4 и т.н как мога да разбера къде ми е грашката. Има ли някакви насоки към които мога да се ориетирам къде да си търся грешката?
Сигурно за много хора въпросът изглежда глупав, но весе още съм минал сам Basics и явно знанията ми не са достатъчни да си го обясня.
Ами разликата е в това , че когато я инициализираш преди while тя може да си пази стойността при различните итерации, ако не се промени вътре в цикъла. Какво имам предивд: задаваш стойност 0 преди цикъла, после влизаш в цикъла и на първото завъртане задаваш друга цена (примерно 39.99) на конкретната игра. После идва второто завъртане на цикъла, но този път играта, която ти задават не съществува и ти изобщо не влизаш в switch условията, където променяш цените и така променливата си пази пак 39.99 и по-надолу където проверяваш if (currentBalance < priceGame) -> Console.WriteLine("Too Expensive"), ако балансът ти е под 39.99 ти изписва Too Expensive, без да е съществувала играта. Докато ако я инициализираш вътре в цикъл, на всяко повторение ще се инициализира с 0.
Ако все пак държиш променливата да ти живее извън цикъла то в default условието на switch трябва да и зададаваш
priceGame = 0.0, за да имаш промяна на цената във всички ситуации. По принцип, когато използваш една променлива само в конкретния {scope} и няма да ти трябва стойността и след това, то по добре си я инизиализирай вътре. Същото важи и за другата ти променлива nameGame, няма смисъл да я инициализираш предварително string nameGame = null и после да я четеш в цикъла. По-добре е направо в цикъла string nameGame = Console.ReadLine();, за да не ти носи старата стойност в новото завъртане.
Вече зацепих :), още веднъж благодаря за подробното обяснение!
някой може ли да ми обясни какво прави return; в while цикъла ... че немога да го разбера на английски като го прочета ... видях че си го използвал за това питам. Мерси!
return; се използва за приключване на програмата. Примерно изпълнило ти се е някакво условие и не ти трябва да върти другите простотии.
Return; сам по себе си слага край на текущия метод или функция и ако има код след return то той не се изпълнява. Ако текущия метод е Main() то тогава програмата приключва. Също ako методът не е void той трябва да върне стойност от предварително зададен тип. Примерно в случая по долу трябва да върне int
public static int calculateSum(int a, int b){
return a + b;
}
И извикваме метода с .
int result = calculateSum(5, 10);
result = 15;
По принцип от циклите се излиза с break; и не е много добра практика да се използва return много често, освен ако неможе да се сетим за друг вариант.
O.o мисля че ще го схвана по- нататък ... засега ще си ползвам брейк за излизане и континю за пропускане :А
е то няма какво толкова за схващане break чупи цикъл но не връща нищо. continue пропуска едно завъртане на цикъла return чупи цикъла като break,но връща и стойност ако се наложи. другия оператор за цикли е goto но тои рядко се ползва. Общо взето как ще счупиш цикъла няма значение,по конвенция с break e ок no нищо не пречи примерно да го счупиш и return и да върнеш и променливата всичко зависи от това какво се иска. Както в swith case чупиш след всеки case с break но може и с return.
това което и трябва да знаеш е че break просто чупи а return може да връща и value type
значи ретърн чупи и може да му кажеш да върне някаква стойност, брейк само чупи, континю пропуска и чупи само текущото завъртане... доста хора ползват ретърн без да дават стойност за връщане вместо брейк ... често го срещам в разни решения и все се чудех защо не брейк ами ретърн, а те явно така са си свикнали и ми беше объркващо
да въпрос на навик е, return ще го ползвате повече като започнете да работите и пишете методи,а continue не чупи цикъла е прескача моментната итерация и продължава с следващата. примерно пускаш цикъл от 0-10 да ти печата само нечетните числа и правиш една проверка дали i%2==0 и ако е така му казваш continue и минаваш направо на следващата итерация и реално ако ги пускаш на конзолата ще получиш само 1 3 5 7 9 другите си ги прескочил. Д Внимателно къде и какво чупиш те сега нещата са простички ама по нататък става опасно къде и какво се итерира или прекъсва :Д
дано да стигна та да видя :)