ТОП 10 причини за FAIL на единичен тест в Judge системата
Най-неприятното нещо, което може да Ви се случи на изпит, е единичен тест да даде грешка в Judge системата. Ето защо направих списък с най-честите и неподозрителни причини за това. Направих поста специално за предстоящите изпити. Тук са само случаи, в които Visual Studio няма да ни подчертае с червено, защото ще се компилират, но не както ние желаем и е описано в условието на задачата.
1. Граничен случай
Пример: ">", вместо ">=". Четете внимателно условията дали не се иска проверката до числото включително.
2. Грешка при copy-paste
Пример: "-" дефисът е всъщност дълго тире "–" или нещо друго се е объркало при copy-paste, като "Аutumn" с "А" на кирилица (наистина се е случвало по време на изпит). Възможно е и заради едва забележим space в string-a да ви гръмне някой тест ("June ", вместо "June".)
3. Не Parse-вате правилно числата в правилния формат
Пример:
double n = int.Parse(Console.ReadLine());
Куриозът е, че когато се случи IDE-то не го подчертава, а програмата гърми.
4. Не сте избрали Current Selection и се компилира друг код от Solution-а
Ако не сте направили това, то няма смисъл да си говорим и въобще да разглеждаме другите възможни причини.
5. Пропуснали сте нещо в условието
Дори да сте изпуснали и една дума, може да се обърка цялата логика, затова четете внимателно.
6. Делителят е int, делимото също е int, а ние очакваме резултатът да е дробно число.
Пример:
double x = 25 / 100;
вместо
double x = 25 / 100.0;
или
int y = 100;
double x = 25 / y;
вместо
int y = 100;
double x = 25 / (double)y;
Проверявайте интервала в условието [1.00 ... 1 000 000.00] - щом има десетична точка (.), значи се иска конзолата да чете дробно число и трябва да го сложите в double, decimal или float.
7. Някой placeholder или масив не работи
В програмирането броим от нула, така че да не се чудите, ако Ви излизат грешни резултати.
8. Няма къдрави скоби след if проверката, for или while цикъла
Така влиза само в следващия ред.
Пример: Тук имаме и случай, в който не сме си форматирали кода добре.
if (n > 10)
Console.Write("n is bigger than: ")
Console.WriteLine(10); // неправилно форматиране (с абзац навътре)
вместо:
if (n > 10)
{
Console.Write("n is bigger than: ")
Console.WriteLine(10);
}
9. Кодът ни не работи само в някои изключения
Пример: Чертаем някаква фигурка на конзолата (например ромб), но когато въведем 1 или 2, програмата гърми... Най-вероятно някой new string смята отрицателен резултат, но вместо да си играем да го оправяме, за да спестим време, разглеждаме изключенията като отделни случаи и с return спираме изпълнението на програмата:
if (n == 1)
{
Console.WriteLine("*");
return;
}
else if (n == 2)
{
Console.WriteLine(" *");
Console.WriteLine("***");
Console.WriteLine(" *");
return;
}
10. Объркали сме име на променлива или поредността на четене от конзолата
Пример: productKG, вместо productPrice.
Да, случва се и някой път се чудим с часове какво става. Логиката на задачата ни се струва без грешка, а то какво било – някакво си объркано име, заради невнимание или неправилна последователност на четене от конзолата…
Проверете тези случаи, ако смятате, че ще откриете грешката си по-бързо, отколкото с дебъгъра, или пък въобще няма да стане с дебъгъра, понеже fail-a в Judge не е на нулев тест и не Ви дава да видите вход/очакван изход, наш изход. Опитах се да съм колкото се може по-изчерпателен, но няма как да обхвана всичко, затова добавяйте и Вие варианти за грешки в коментарите, та с Ваша помощ да направим този пост извор на причини за бъгове!
И разбира се - успех на изпита!
Благодаря за допълнението, сигурен съм, че ще е много полезно за Java кодерите!
In spite of the fact that we imagine something else, quite a bit of what we do in the law is mystery. For instance, we like to flaunt that our criminal equity framework is intensely inclined for criminal litigants. white leather jacket - TheLeatherMakers