Прайсы

  • 20
  • Недоступна
CRUD для таблицы внутри файла. Напиши программу, которая считывает с консоли путь к файлу для операций CRUD и при запуске со следующим набором параметров: -c productName price quantity добавляет товар с заданными параметрами в конец файла, генерируя id (8 символов) самостоятельно путем инкремента максимального id, найденного в файле.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (897)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Руслан
Уровень 42
24 июня, 09:23
Решил в 40 строк по такому алгоритму: 1. Если аргументы == 0, return 2. Если 1-й аргумент equals "-c" : читаем путь к файлу. Далее создаём потоки чтения/записи. 3. Id: Читаем файл построчно, вытягиваем из него id и добавляем в лист. Если коллекция не пуста, то получаем из неё максимальный id. Далее с помощью String.format форматируем инкрементированное значение id 4. Product: в цикле до args.lenght-2 склеиваем имя продукта и также с помощью String.format форматируем 5. Price и Quantity - достаём их из args и также форматируем 6. Далее пишем всё это дело в файл (не забываем про true). Почему-то валидатор не принимал, если после записи результирующей строки делаем перенос строки, но принимает, если выполнить перенос перед записью результата. Всё
Bigborg Безработный в /на мешке картошки
18 июня, 19:41
Сомнительная задача, не советую упарываться надолго.
Муса
Уровень 20
12 июня, 16:43
Кто нибудь может объяснить, почему нужно переносить строку прежде чем записывать значения товара в файл? Ведь в таком случае мы получаем пустую первую строку и при добавлении продукта в лист получаем ошибку исключение.
Сонмониус
Уровень 33, Харьков, Ukraine
13 июня, 16:38
Наверное из-за того, что по условию в файле уже что-то должно быть. Я вначале делал без переноса, лепило строку в продолжение крайней, тоже к этому решению пришел в итоге.
Сергей
Уровень 30, Ростов-на-Дону
8 июня, 15:34
Может кому будет полезно: в решении маска форматирования такая:"%-8d%-30s%-8s%-4s". Но в таком случае, если название будет длиннее 30 символов, оно не обрежется. Должно же быть %-30.30s. В принципе данное замечание верно для всех остальных частей с conversion типа s. %[argument_index$][flags][width][.precision]conversion - в оф. документации написано, что width - это минимальная ширина, но не максимальная, а как раз только precision ограничивает длину строки.
String id = String.format(Locale.ENGLISH,"%-8d",Integer.parseInt(createId(treeSet.last())));
                String product = String.format(Locale.ENGLISH,"%-30.30s",args[1]);
                String price = String.format(Locale.ENGLISH,"%-8.2f",Double.parseDouble(args[2]));
                String amount = String.format(Locale.ENGLISH,"%-4.4s",args[3]);
Kim FIame
Уровень 23, Санкт-Петербург
4 июня, 23:33
Устал мучаться с валидатором. Просто решаю задачу в idea и копирую решение. Пройдет валидацию - хорошо, не пройдет, нажимаю правильное решение. Так и тут, может я чего-то не понимаю, но зачем создавать какой-то массив имеющихся продуктов (и для этого создавать новый класс с конструкторами(!)), если у filewriter есть параметр append, добивать/обрезать строки, если есть format. Зачем делать свитч с ОДНИМ(!) параметром? Я,конечно, программист начинающий, но "правильное" решение выглядит просто ужасно. Если я в чем-то неправ, поправьте, пожалуйста, буду знать, где мыслю кардинально неверно в плане программирования.
Сонмониус
Уровень 33, Харьков, Ukraine
13 июня, 16:43
за свитч с одним параметром тоже не понял задумки) Список существующих продуктов, у меня есть подозрение, для следующих задач создавали
comrade_b
Уровень 27, Амстердам, Нидерланды
1 июня, 18:57
Вы решили задачу лучше, чем 72% учеников. Вам удалось ее решить с 1 попытки. Среднее количество попыток для этой задачи 5.79. Всего эту задачу решили 16242 учеников. Полезное: 1. Я рекомендую использовать BuferredReader/Buferred Writer, куда в качестве параметра передается FileReader/Writer. Так проще читать построчно, нежели чем маяться с массивом символов. 2. Если в BufferedWriter передать вторым параметром тру, то он не будет обнулять читаемый файл. 3. Когда добавляете новую строку, через метод аппенд ридера, не забывайте добавлять "/n", чтобы добавлялась именно новая строка. 4. String.format серьезно упрощает решение. И подходит валидатору. Это про редактирование строки по нужному формату, чтобы выравнивать и добавлять пробелы и символы. Про использование можно почитать тут: Основная инфа Дополнительная инфа 5. Решать через перебор массивов - вообще не вижу смысла. Это устаревшее решение. Можно и нужно решать эту задачу построчно. *** Посмотрел готовое решение. Да, в готовом решении был сделан вложенный класс. И я изначально хотел сделать так же, но внимательно перечитав условия задачи, я отказался от этой затеи. Полагаю, что во второй части прайса придется это все-таки сделать. Но сейчас у меня намного проще код получился и валидатор принял с первой попытки. Я потратил где-то часа 4 на то, чтобы спроектировать решение и делал несколько попыток запуска. В итоге три раза начинал с нуля. И пришел именно к правильному решению наименьшего сопротивления. Мой код: 55 строк и 1958 символов, против готового решения: 86 строк и 2777 символов. Задача отличная. Прайс 2, я иду к тебе! 🤖
milyasow
Уровень 30, Москва, Russian Federation
3 июня, 11:26
Я вообще парсил из файла только Id, чтобы потом его инкрементировать и добавить новую строку в нужном формате.
comrade_b
Уровень 27, Амстердам, Нидерланды
3 июня, 12:08
Посидел, подумал. Ну там можно не парсить название . Можно просто посчтиать длину строки и, если строка больше необходимой длины обрезать с конца, либо добавить с конца необходимое количество пробелов. И в принципе не надо перебирать, просто оперировать длиной строки. Верно. Но вот количество и цену придется парсить. Потому что теоретически туда могут передать любое число, с любым количеством знаков после запятой. А у нас ограничение по условиям задачи: цена - до сотой, количество - до целых. Если не заморачиваться с этим, и всегда передается цена и количество в верном формате, то можно не парсить. Тоже просто длина строки + обрезать или долбавить количество пробелов. Но все-таки форматирование выглядит более универсальным.
milyasow
Уровень 30, Москва, Russian Federation
3 июня, 12:44
я не про парсинг параметров, а про "добычу" масимального id из файла) Мы же не изменяем его тело, только аппендим свою строчку. Сейчас второй прайс решаю, там конечно все интереснее...
comrade_b
Уровень 27, Амстердам, Нидерланды
3 июня, 13:55
О да, но там уже было проще, потому что было понятно как решать =) Хотя там три раза пытался пройти валидатор, хоть у меня и работало все... Но в принципе, ничего нового
PENGUIN
Уровень 33, Киев, Ukraine
26 мая, 18:20
Как по мне валидатор этого задания это ужас, сделал всё, проверял всё записывалось как надо, по валидатору 2 ошибки(форматирование, id), после этого сидел ещё минут 30, решил попробовать готовое решение, запустил и при вводе файла вылетели ошибки, я в шоке, готовое решение на основе которого построен валидатор, не идеально, прям совсем не идеально, это ужас. Становиться грустно, что решение которое писал 5 часов и ещё где-то час тестил + дебагал, которое на практике отлично работает, не проходит валидатор, а готовое решение в котором нельзя указать какой угодно путь к файлу и ты даже не смог проверить как оно работает на практике проходит валидатор
Anonymous #2963897
Уровень 19, Москва, Russian Federation
24 мая, 09:02
решал все задачи сам. но эта первая задача которая ввела меня в полный ступор. 2 дня гуглю, так и не допер как сделать. мне кажется много слишком не проходили для решения этой задачи.
milyasow
Уровень 30, Москва, Russian Federation
3 июня, 11:34
Не тот квест начали. Если бы с Syntax-0 начали проходить, многое было бы понятнее.
Anonymous #2963897
Уровень 19, Москва, Russian Federation
3 июня, 16:17
Я проходил все квесты по порядку как они у меня шли в предложенном курсе.
milyasow
Уровень 30, Москва, Russian Federation
3 июня, 19:00
Посмотрите, Одни и те же задачи решаем, а разница в 10 уровней. В них как раз было много недостающей информации для решения. Это к вашему вопросу: мне кажется много слишком не проходили для решения этой задачи.
Anonymous #2963897
Уровень 19, Москва, Russian Federation
6 июня, 06:22
дело в том, что курс подбирается инидивидуально как я понял. Если вы посмотрите, подавляющее большинство вопросов от пользователей моего уровня.
Виктор
Уровень 19, Бобруйск, Беларусь
19 мая, 13:10
Вы решили задачу лучше, чем 41% учеников. Вам удалось ее решить с 4 попытки. Среднее количество попыток для этой задачи 5.8. Всего эту задачу решили 16164 учеников. Я кончил, часов 5🤦‍♂️🤦‍♂️🤦‍♂️
Erizo
Уровень 23, Минск, Belarus
16 мая, 09:24
Пытался сделать универсальное решение, но.. В условии есть конкретные указания, верно? Тогда все столбцы если слишком длинные будут обрезаны? id и цену обрезать тоже? В этом вообще есть логика??
Erizo
Уровень 23, Минск, Belarus
16 мая, 10:51
физически не могу себя заставить обрезать id. Это очень неправильно. Это очень плохая задача. Работаю с бд уже больше двух лет, пожалуйста не заставляйте меня делать такие вещи((
milyasow
Уровень 30, Москва, Russian Federation
3 июня, 11:37
Зачем обрезать, инкрементируй) Разве мало для прайса таблицы на 99 миллионов строк?
Erizo
Уровень 23, Минск, Belarus
6 июня, 12:42
задача такая, надо обрезать.. Да, тебе хватит и того, что есть) Но сам факт этого обрезания так расстраивает.. Хотя я пообщался с опытными людьми, мне сказали что такая практика есть, когда ну очень много строк, видимо старые заменяются