Къде се дъни на Judge?
Заданието
Моето решение е това https://pastebin.com/JVdE3QcB, уви получавам само 40/100 точки. Къде според вас е грешката?
Заданието
Моето решение е това https://pastebin.com/JVdE3QcB, уви получавам само 40/100 точки. Къде според вас е грешката?
Проблемът с тестовете в Judge е защото премахвате празните символи около входните параметри, което може да изглежда логично, но не е част от заданието:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// String[] articleData = scanner.nextLine().split("\\s*,\\s*");
String[] articleData = scanner.nextLine().split(", ");
int n = Integer.parseInt(scanner.nextLine());
Article article = new Article(articleData[0], articleData[1], articleData[2]);
for (int i = 0; i < n; i++) {
// String[] tokens = scanner.nextLine().split("\\s*:\\s*");
String[] tokens = scanner.nextLine().split(": ");
String command = tokens[0].toLowerCase().trim();
// String data = tokens[1].trim();
String data = tokens[1];
С горните промени ще вземете 100/100 в Judge, но тъй като задачата е част упражнението към Objects and Classes, ще си позволя няколко коментара и по кода.
Пропуснали се да сложите access modifiers на полетата (почти винаги трябва да е private) в Article класа, както и на конструкторът му (най-често трябва да е public).
По конвенция имената на методите в Java трябва да са в (lower) camelCase.
Благодаря, наистина получих 100 точки. Принципно знаех, че проблема е с входните данни и регулярният израз, но позволи ми да дам малко, надявам се, конструктивна критика.
Относно конвенцията, аз съм написал както си е по задание. Самите задания не спазват тази конвенция, и дори в лекциите да е споменавано, по никакъв начин тези задания не помагат при затвърдяването на тези знания.
Второ, заданието в текста има разминаване в това какъв изход иска от нас, и какъв е даден като пример.
Тук няма място между content:author, а в примерния изход има, което беше дори първата ми грешка. Тоест тук заданието не се опитва дори да е едно към едно с това, което се изисква и това, което реално трябва да е.
Тука идва и същественето за мен, че програмата минава Zero Test-a, там няма проблем с мястото, а се дъни на другите. Скоро имах подобен проблем отново с регулярните изрази, че при .split(" ");(празно място) работеше при един от тестовете, а при другите не и то дори вместо грешка имах RunTime error(звездичка вместо X), оказа се, че трябвало да ползваме \\s+, по тая логика работих след това, затова по никакъв начин не е било интуитивно за мен да напиша .split(", "); Като начинаещи в Джава, както и с регулярни изрази, от наша гледна точка това са някакви странични ефекти, които не са покрити задълбочено, или да се упоменава в заданието, че входните данни ще имат променливи на брой спейсове, понеже както показах, Zero test-a с примерният вход минава, а другите не.
Разбирам, че в Джъдж не показвате останалите тестове къде се дънят с цел да провокирате сами да си решаваме проблемите и да развиете нашето логическо и алгоритмично мислене, но в такива случаи където изпадаме в caveat(и това вече няколко пъти с входните данни) и не сме добре запознати с тях, е по-подходящо или тестовете да са нагодени с това, или заданието изрично да споменава, че ще има вход с множество спейсове.
Отново давам пример, че Zero Test-a,
има място между отделните елементи и минава, това при
а при другите не.
Относно access modifiers, беше ни показано, че когато е в един и същи файл този клас, няма значение дали е private или public, пак може да се достъпи полето. Тук прецених, че няма смисъл да се добавят.
Та да обобщя, имам предложение заданията да са написани по изискванията, които трябва да се следват, конвенция и тестовият вход на данни(да няма разминавания), а Джъдж да допуска да виждаме първият Test(не Zero), който се дъни, за да може да видим какъв вход се подава, и тогава вече да помислим къде реално е грешката ни. Според мен това повече ще помогне от текущият метод да се показват само Zero Test-овете.
@farmdve
Аз не съм част от екипа на СофтУни (и никога не съм бил) и не очаквам някой от екипа да чете тук, така че най-добре ще е да споделите мнението си относно текста на заданиятa и работата на Judge директно с преподавателя или с ръководителя на обучението по модула, който карате.
Иначе, съм съгласен, че заданието трябва да е така написано, че нищо да не се оставя за свободно тълкуване, особено като се има предвид, че няма кой да внесе яснота в двжение и остава само "борбата" с Judge.
Оносно конвенциите не съм съгласен. Те се имплеменационен детайл (не променят поведението на програмата) и винаги трябва да се спазват.