Здравейте, колеги
Опитвам се да използвам подход за решаването на тази задача, който Judge не приема, но всичко работи наред при мен.
Идеята ми е да използвам минимално количество код, като работя директно по първоначалния String[] масив при user input, премахвайки всички дубликати чрез HashSet.
След това for/each loop върти String variable до length-а на String[] масива, докато вътре в него while loop проверява дали прочистения от дубликати HashSet не съдържа въпросния String variable. И ако това е така, добавяме String variable-a (което реално е номерче под формата на String) в празен ArrayList missingNumbers.
После просто представяме missingNumbers със String join(), за да му добавим запетайки.
Това е основната част от кода, пълният код тук (обновено решение - виж долу):
/*
Обновление 20.07.19 Долният код е действително грешен, просто аз съм гледал друг output заради погрешни настройки в InteliJ. По-долу в темата намираме алтернативно решение на тази задача. Междувременно, няколко дни след това открих грешката в моя код по-долу (смених for/each loop със стандартен for loop) и обнових горния линк с въпросното решение. Така че в тази тема има две решения на тази задача
*/
/*
Обновление 21.07.19 Разбрах причината долния код да е грешен - iterator variable-a при for/each loops е винаги item от самия Array/ArrayList, който той повтаря. Следователно, питането в моя while loop дали въпросния variable не се съдържа в изчистения от дубликати HashSet е безмислено - защото той винаги се съдържа в HashSet-а.
Да речем, пишем: 1,2,3,3,5. HashSet-а премахва двойната тройка и оставя 1,2,3,5. После чрез for/each loop-a минаваме през първоначалния Array от 1,2,3,3,5 (а не от 1 до 5 както аз си мислих) - и питаме дали тези числа не се съдържат в HashSet-a. Затова и получавах празен output от Judge, защото тези числа винаги се съдържат там.
*/
Scanner userInput = new Scanner(System.in);
String[] numbers = userInput.nextLine().split(",");
ArrayList<String> missingNumbers = new ArrayList<>();
HashSet<String> removeDup = new HashSet<>(Arrays.asList(numbers));for (String strTemp : numbers) {
while (!removeDup.contains(strTemp)) {
missingNumbers.add(strTemp); }
}
System.out.println(missingNumbers.toString().join(",", missingNumbers));
Judge ми дава, че вадя празен output:
Ще се радвам, някой да помогне да решим загадката!
Благодаря предварително!
Поздрави,
Петър