Loading...
gartin avatar gartin 73 Точки

[Technical Issue] Judge - Java Basics - Debugging Lab {3} - Be Positive

Здравейте, колеги.

Как бих могъл да разбера каква ми е грешката, при положение, че правейки тестовете на ръка получавам правилните отговори, но Judge-а ми дава само 40/100?

 

Това, което получавам като детайлна информация е :Тест 1, 2 и 3 с runtime error, а Zero Test #1 & 2 и Тест 4 и 5 правилни.

 

Ето как изглежда кода: ЛИНК

2
Java Advanced 26/01/2015 14:50:32
brslv avatar brslv 69 Точки

Най-добре използвай дебъгера като пробваш различни комбинации от входни стойности. Опитай с възможно най-прости. В случая един ред с 2-3 елемента и виж какво е поведението на кода. В краен случай си изтегли тестовете и дебъгвай с тях.

Тук проблемът идва от това, че когато броячът j достигне последния елемент от ArrayList-а, нямаш следващ елемент, с който да го събереш (currentNum += numbers.get(j + 1)) и излизаш извън масива.

Мисля, че ще се досетиш как да се оправиш с тази "дреболийка". :)

Успех!

1
26/01/2015 14:01:14
gartin avatar gartin 73 Точки

Благодаря, ще обърна внимание на това, което посочи.

 

А как мога да сваля тестовете, които judge-a прави? На следващата задача с дадените примери, пак получавам всички отговори, но judge-a казва 0/100...

0
brslv avatar brslv 69 Точки

Можеш да си изтеглиш тестовете от инстанцията на курса. Специално тези от лаб-а са качени в архива за домашно. Но най-добре, ако искаш да има ефект от цялата работа, се побъхтай малко, както казаха колегите по-долу. Експериментирай :)

0
Filkolev avatar Filkolev 4482 Точки

Единственият отговор на въпроса ти е - с ефективно дебъгване.

Runtime error, разбирай Exception, е по принцип хубава грешка, защото е сигнал за по-сериозен бъг в програмата, т.е. нещо, което по-лесно може да се хване, отколкото грешен отговор.

Оправил си почти всички бъгове, но има един, който предизвиква Exception при определени условия. Обикновено помага да дебъгваш с всякакви гранични случаи - една или повече от променливите да са на границите на обявените restrictions. 

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

1
archlicher avatar archlicher 32 Точки

За да тествате кода си, винаги пробвайте граничните стойности:

ако имате граници [0..100]

/* квадратните скоби означават "включително"  */

1) тестватейте 0 и 100

2) 1 и 99

3) -1 и 101

Аналогично трябва да се тества на всяка подобна граница.

Същото е валидно и за double.

4
svetlozar_kirkov avatar svetlozar_kirkov 11 Точки

Четвъртият тест в джъджа ми дава грешен отговор , но явно ми изпуши главата от кодене и не мога да намеря причината (сигурно е проста):

Be Positive

0
Filkolev avatar Filkolev 4482 Точки

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

За да те насоча малко - при преминаването на нов ред нещата не се случват както трябва и в определени ситуации ще получиш неверен отговор.

1
knoteva avatar knoteva 1081 Точки

j++ трябва да е вкрая на първия else между двата if в първия else.

 

 

0
26/01/2015 15:49:58
svetlozar_kirkov avatar svetlozar_kirkov 11 Точки

На 37 ред било разковничето: 

System.out.printf("%d%s", currentNum, j+1 == numbers.size() - 1 ? "\n" : " " );

Благодаря!

0
knoteva avatar knoteva 1081 Точки

Мисля,  че judge дава 100 точки, при неизцяло правилно решение. Ако, примерно,  имаме входни данни:

2

 0 -1 -1

5

изходът е: 0 5

Сложила съм още един else if:

if (currentNum >= 0) {
//
System.out.printf("%d%s", currentNum, j == numbers.size() - 1 ? "\n": " " );
found = true;
}
else if (currentNum < 0 && j == numbers.size() - 1 && found ) {
System.out.println();
}

 

0
Filkolev avatar Filkolev 4482 Точки

Може ли да дадеш пример на грешен код, който дава 100 точки на задачата? Ако има нещо такова, това е пропуск в тестването - не са покрити всички възможни ситуации.

1
Filkolev avatar Filkolev 4482 Точки

Мерси, проверка трябва да има наистина. Може малко да се съкрати:

else if (j == numbers.size() - 1 && found ) {
     System.out.println();
}

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