Help needed "Phone bill" task

Здравейте,

Имам нужда от помощ за задача “Phone bill”. “Judge” ми дава грешка в един от тестовете и не мога да разбера защо. Ако е проблем при форматирането, при мен всички резултати, без броя на съобщенията и минутите, се изпечатват с два знака след десетичната запетая.
Това е кодът ми на задачата:

https://pastebin.com/vwyic8Z4

Здравей,

Може да погледнеш дискусията за задачата Biggest of three и отговора за същата задача - тук.

Вероятно проблемът ти е подобен :slight_smile:

Успех!
Надя

Здравей, Павлин!
Ако все още не си открил решение добави кой тест не минава и какъв е твоят резултат в системата, за да се ориентираме къде точно в кода може да е проблема.

Успех,
Диди

ПП:
Всъщност имаш правописна грешка в първия else if
System.out.println(“0 additional messages for 0.00 leva”);
leva => levas

Здравейте,

Много благодаря за помощта!
Весело посрещане на Новата година!

Поздрави,
Павлин

Здравей,
каква е връзката със задачата Biggest of three? В случая възможно ли е да се въведат нецели sms-и или минути?

И в допълнение още един въпрос - на пръв поглед задачата изглежда елементарна. Искам да я реша с 2 последователни If-a. Нека входовете са sms и min. Като първоначално инициализираме допълнителните минути и смс-и да са 0.
Двата последователни if-a грешна логика ли е за тази задача?
int addsms = 0;
int addmin = 0;
if (sms>20){ addsms = sms-20;}
if (minutes>60){ addmin = minutes-60;}

Мерси!

Здравей :slight_smile:
Опита ли се да решиш задачата и да установиш два последователни if-a работеща логика ли са?
Идеята е да опитате да имплементирате собствената си логика и ако има проблем и тя не покрива всички тестове да дадете код и да получите помощ какво пропускате.

Всяка задача може да бъде решена по няколко различни начина, като целта на форума не е да предоставя готови решения, а да помага вашите да проработят.

Поздрави,
Диди

Задрвей,
досега не бях писал в intelij решения, за да бъда уж по внимателен, но тази задаче ме накара да я напиша. И по-важното не виждам защо последователните if-ове да не работят, но пък колегите са изписали чаршафи с проверки … Написах я, работи безотказно. Стига да дефинираме смс и мин като цели числа, и да въвеждаме такива, което бих казал е логично. Но явно има някаква загадка с типовете данни…

Бих благодарил за помощта, ако наистина във форума имаше нещо смислено относно тази задача. Видях съвет правещ аналогия със задачата the biggest of three и тъй като там особеността (закачката) е типът на данните, не толкова конструкцията за проверките, отделих 6 часа над всевъзможни въртележки. И коментарите от колегите които разписват, бих казал безсмислено дълги решения, са много подвеждащи. Няма да коментирам решението, в което се прави проверка за смс и мин < 0… А й judge ми връща някакви глупости, за да разбера, че грешката ми е в липсващото s в изходната дума levas. Няма да споделя решението, за да могат и другите колеги да се отдадат на тази задача. Само ще подскажа, че решението е образно казано на 2 реда и няма никаква драма дали импортваме цяло или десетично число (поне за judge).

Много се радвам, че работи твоето решение :slight_smile:
Но препоръчвам да пишеш решения в IntelliJ. Писането там ще ти е полезно - има доста подсказки, съответно виждаш и документация/описание на типовете данни и класове, които използваш, дава ти предложения и може понякога да ти спести много време.

Успех,
Диди

За зла съдба, едва сега виждам, че колегата Павлин се е забавлявал, също като мен с липсващото s на levas. И първия съвет към него са линкове, които го водят в съвсем грешна посока (досъщ като мен може би е търсил под вола теле и под телето вол ).
Може би статистиката на грешката липсващо s в levas е стряскаща, и моят съвет е да се коригира (побългари задачата) така че judge да одобрява leva.

  • wrong answer който ми даваше judge, по нищо не подсказваше липсващото s, a ми извеждаше грешна стойност…

Това ще се случва и в бъдеще.
Никога няма да получиш грешка, която ще те насочи точно какво да промениш в кода :slight_smile:
А за мен сблъскаването с грешки е един много добър начин да се уча да чета внимателно и да проверявам задачите си с различни данни :wink:

В случая грешката не е в синтаксиса ми или логиката, а в конкретния изход който judge очаква, който пък от своя страна, не е ОК в контекста на реалния живот и дори не е описан в условието на задачата, а някъде си отдолу. Да, грешката е изцяло моя, но пък не е ОК judge да ми подсказва къде греша в синктаксис (което на практика се случва), а да не ми подскаже нещо от вида - твоя изход е …leva, а аз очаквам …levas. Всъщност такъв judge, който намира текстовите грешки (човешките ) и фокусира вниманието към тях съм срещал, но като този - да ми показва грешката в кода / синтаксиса/ не бях виждал.

думата levas поне да бъде levs…
Благодаря за разбирането!

Входни и изходни данни за програмата са от изключително значение
Реално това да примери за изискванията, които твоят код трябва да покрие.
Ако беше тествал програмата си локално щеше сам да си откриеш грешката.
Понякога един интервал може да доведе до неочаквани резултати.

Моите приоритети на този етап са да уча кода, не преписване на текст. Може би и judge трябва да има такива. Това е генерален проблем на judge-а, който би трябвало да може да се коригира.
Лека вечер!

Здравей, Георги

Разбирам много добре какво казваш относно приоритетите и те напълно съвпадат с нашите. От друга страна като програмисти никога не може да сме застраховани, че няма да допуснем правописна грешка или пък друга малка на пръв поглед такава, но която е трудна за откриване и дебъгване. Макар IDE-тата да помагат това да бъде минимизирано, все още е част от работата на всеки програмист да открива такива грешки и да ги разрешава.

Поздрави,
Стелян.

1 Like

https://pastebin.com/HyzcmShe

Здравейте,

Ето моят код. Логиката ми е вярна, но не успявам да наглася принтирането да бъде точно такова, каквото очаква judge системата. Като цяло този проблем съм го имал и с други задачи, където съм хардкоудвал нещата само, за да бъдат приети от системата.

Ще съм благодарен и на предложения за кода, защото май съм използвал и доста променливи, а може да бъде най-вероятно направено и по-ефективно.

Поздрави!

Здравей :slight_smile:
Виждам, че използваш df. Пробвай с double “%.2f” и ако не се разреши проблема пусни актуален код да го тестваме :wink:

Поздрави,
Диди

Тъй като този проблем често го срещам - има ли някаква най-добра практика, която може да се ползва, за да принтирам както се очаква?

Също така - имаш ли други препоръки за оптимизация на кода?