Loading...

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

MartinBG avatar MartinBG 4803 Точки
Best Answer

Проблемът с тестовете в 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.

 

 

1
30/11/2020 01:34:35
farmdve avatar farmdve 1 Точки

Благодаря, наистина получих 100 точки. Принципно знаех, че проблема е с входните данни и регулярният израз, но позволи ми да дам малко, надявам се, конструктивна критика.

 

Относно конвенцията, аз съм написал както си е по задание. Самите задания не спазват тази конвенция, и дори в лекциите да е споменавано, по никакъв начин тези задания не помагат при затвърдяването на тези знания.

Второ, заданието в текста има разминаване в това какъв изход иска от нас, и какъв е даден като пример.

override ToString – print the article in the following format:
"{title} - {content}:{author}"

Тук няма място между content:author, а в примерния изход има, което беше дори първата ми грешка. Тоест тук заданието не се опитва дори да е едно към едно с това, което се изисква и това, което реално трябва да е.

Тука идва и същественето за мен, че програмата минава Zero Test-a, там няма проблем с мястото, а се дъни на другите. Скоро имах подобен проблем отново с регулярните изрази, че при .split(" ");(празно място) работеше при един от тестовете, а при другите не и то дори вместо грешка имах RunTime error(звездичка вместо X), оказа се, че трябвало да ползваме \\s+, по тая логика работих след това, затова по никакъв начин не е било интуитивно за мен да напиша .split(", "); Като начинаещи в Джава, както и с регулярни изрази, от наша гледна точка това са някакви странични ефекти, които не са покрити задълбочено, или да се упоменава в заданието, че входните данни ще имат променливи на брой спейсове, понеже както показах, Zero test-a с примерният вход минава, а другите не.

Разбирам, че в Джъдж не показвате останалите тестове къде се дънят с цел да провокирате сами да си решаваме проблемите и да развиете нашето логическо и алгоритмично мислене, но в такива случаи където изпадаме в caveat(и това вече няколко пъти с входните данни) и не сме добре запознати с тях, е по-подходящо или тестовете да са нагодени с това, или заданието изрично да споменава, че ще има вход с множество спейсове.

Отново давам пример, че Zero Test-a,

some title, some content, some author

има място между отделните елементи и минава, това при

split("\\s*,\\s*");

а при другите не.

 

Относно access modifiers, беше ни показано, че когато е в един и същи файл този клас, няма значение дали е private или public, пак може да се достъпи полето. Тук прецених, че няма смисъл да се добавят.

 

Та да обобщя, имам предложение заданията да са написани по изискванията, които трябва да се следват, конвенция и тестовият вход на данни(да няма разминавания), а Джъдж да допуска да виждаме първият Test(не Zero), който се дъни, за да може да видим какъв вход се подава, и тогава вече да помислим къде реално е грешката ни. Според мен това повече ще помогне от текущият метод да се показват само Zero Test-овете.

1
30/11/2020 11:35:45
MartinBG avatar MartinBG 4803 Точки

@farmdve

Аз не съм част от екипа на СофтУни (и никога не съм бил) и не очаквам някой от екипа да чете тук, така че най-добре ще е да  споделите мнението си относно текста на заданиятa и работата на Judge директно с преподавателя или с ръководителя на обучението по модула, който карате.

Иначе, съм съгласен, че заданието трябва да е така написано, че нищо да не се оставя за свободно тълкуване, особено като се има предвид, че няма кой да внесе яснота в двжение и остава само "борбата" с Judge.

 

Оносно конвенциите не съм съгласен. Те се имплеменационен детайл (не променят поведението на програмата) и винаги трябва да се спазват.

0
30/11/2020 16:26:54
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.