Как научиться решать задачи? Словил мини тильт
527
30
Доброго времени бытья дорогие друзья, я уже с июля пытаюсь вкатиться в IT. Ну соответственно вопрос одноименный с заголовком сабжа, недавно до меня дошло что начиная со среды разработки до языка программирование, в том число и библиотеки со фреймворками == инструменты, а решение тех иных задач предположим обычного "Hello world" до "Сложной программы" это опыт, усилие и труд людей.
Потому я всегда после некоторых теоретических знаний я иду искать себе практику который мог бы менять научить решать задачи, привыкать к бизнес логике и в общем работать на благо компаний, соответственно задачи не однотипные допустим я недавно при помощи туториала создал обычное CRUD приложение, поработал с телом запроса. Ну и решил, раз уж я пришел к этому то попробую теперь решить тех задание из свободного доступа, нашел одну задачу вкратце нужно решить (задачка ), и что думаете? При первой же попытке прочитать JSON с файла а не из тело запроса посыпались огромные трудности, я лез в stackoverflow, в документацию gson(библиотека для работы с Json) и даже в саму джаву, ну естественно столько инфы расплавило мне мозги и получилось объект с именем tickets с двумя параметрами null, решив что утро вечером мудреннее я оставил на следующий день, а сегодня открыв IDEA мне захотелось плакать и ныть, и сейчас в тильте пишу такой текст.Теперь вопрос, где и как искать инфу? Как правильно гуглить? Что и где читать? Как научиться читать документацию?(B2 english с переводчиком справляюсь на ура)? Как научиться решать поставленные задачи?
Ну и соответственно если вы хотите сказать что-то типо: Не парься братишка, всё придёт с опытом, то прошу вас хотя бы помочь мне ускорить найти ответы.
P.S программирую на Java.
P.S.S Смотрел видосики по типу, Java на практике, челик пишет код я вижу и всё понимаю теоритический но практический ничего не остается, как научиться не только думать но и действовать?
P.S.S.SАлгоритмы ютуба просто огонь, закинуло в реки
Как научиться решать поставленные задачи?
> Разбиваешь на подзадачи. Желаешь сделать всё как можно проще. Если всё равно не то, бей на еще мельче вещи.
Как научиться читать документацию?
> Ищешь quick start, читаешь, пробуешь. По мере использования и возникновения вопросов идешь читать что делает тот или иной класс/метод.
Как правильно гуглить?
> Обычно запросы что-то уровня такого
java “gson” how to read json from file
Есть обязательные части вроде “gson”, потом короткий вопрос, который тебе нужен.
Пользуешься не только гуглом, но и яндексом, бингом и прочими. Порой один лучше другого реагирует. Используй параметры поиска, по сайту, по формату файла и т.д.
Цитата:При первой же попытке прочитать JSON с файла а не из тело запроса посыпались огромные трудности
Нажмите, чтобы раскрыть...Советую конкретнее формулировать вопрос. В чем проблема?
Прочитать файл?
Парсить его?
Я так понимаю ты ищешь готовые решения и пытаешься их натянуть на свою задачу. Так не пойдет.
YoshkinKot сказал(а):↑> Обычно запросы что-то уровня такого
java “gson” how to read json from file
Нажмите, чтобы раскрыть...Я всегда гуглю без использования всяких вспомогательных how,why,what
"java gson read json"
"read json java"
"java json to map"
Последний запрос я бы посоветовал вбить, т.к. приходилось поработать с джейсоном в питоне - там можно json превратить в словарь/dict/map и спокойно работать с ним
Например, json
{
"time":"10:00",
"name":"aboba"}
И спокойно делаешь что-то на уровне:
file = json.read(file.json)
name = file["name"] time = file["time"]
Уверен, что в джаве можно так же или примерно так же.
В задании написано написать программу, а не алгоритм, соответственно, считаю, что библиотеки можно использовать
haHAA сказал(а):↑Я всегда гуглю без использования всяких вспомогательных how,why,what
"java gson read json"
"read json java"
"java json to map"
Последний запрос я бы посоветовал вбить, т.к. приходилось поработать с джейсоном в питоне - там можно json превратить в словарь/dict/map и спокойно работать с ним
Например, json
{
"time":"10:00",
"name":"aboba"}
И спокойно делаешь что-то на уровне:
file = json.read(file.json)
name = file["name"] time = file["time"]
Уверен, что в джаве можно так же или примерно так же.
В задании написано написать программу, а не алгоритм, соответственно, считаю, что библиотеки можно использовать
Нажмите, чтобы раскрыть...
Обе из них стринг верно?
А у меня в Json файл был в таком формате.
{"tickets": [{
"origin": "VVO",
"origin_name": "Владивосток",
"destination": "TLV",
"destination_name": "Тель-Авив",
"departure_date": "12.05.18",
"departure_time": "16:20",
"arrival_date": "12.05.18",
"arrival_time": "22:10",
"carrier": "TK",
"stops": 3,
"price": 12400, "еще десяток таких объектов в массиве"]}
Это объект, с объектов в массиве.
Cоответственно всё усложнялось, до этого офк я попробовал обычный json в объект перенести там было два стринга с name и surname, всё отлично получалось.
AtagaN сказал(а):↑Советую конкретнее формулировать вопрос. В чем проблема?
Прочитать файл?
Парсить его?
Я так понимаю ты ищешь готовые решения и пытаешься их натянуть на свою задачу. Так не пойдет.
Нажмите, чтобы раскрыть...
Разве не для этого придумали stackoverflow и библиотеки?
Ectx сказал(а):↑Теперь вопрос, где и как искать инфу? Как правильно гуглить? Что и где читать? Как научиться читать документацию?(B2 english с переводчиком справляюсь на ура)? Как научиться решать поставленные задачи?
Нажмите, чтобы раскрыть...это как раз показательный момент для тех, кто кричит "математика не нужна". в школе тебе дают набор формул и примеры решений, затем в дз ты должен по имеющейся информации синтезировать решение. таким образом тренируется аналитическое мышление.
вывод - ускорить нахождение ответов прокачкой логики ты уже не можешь, тебе остаётся только идти через опыт, а опыт это время. чем больше будет опыта - тем быстрее ты будешь находить ответы (в геометрической прогрессии, если хочешь)
с июля в джаву, джсоны... не расстраивайся, по факту ты в 7 лет хочешь пойти в 9 класс учиться. это так не работает.
джава это ооп, за месяц всё выучить? не шути так. тебе нужно минимум месяц изучать базовые понятия - типы данных, структуры, массивы, функции т.е. читать литературу "для чайников" (и с минимумом практики)
правильная постановка вопроса - это половина ответа. а если ты не понимаешь предметную область, то неправильные вопросы будут заводить тебя всё глубже в лес. поэтому или много прочитай или найди ментора, а если ты хочешь сразу кодить... ну что ж, удачи
ke1evra сказал(а):↑это как раз показательный момент для тех, кто кричит "математика не нужна". в школе тебе дают набор формул и примеры решений, затем в дз ты должен по имеющейся информации синтезировать решение. таким образом тренируется аналитическое мышление.
вывод - ускорить нахождение ответов прокачкой логики ты уже не можешь, тебе остаётся только идти через опыт, а опыт это время. чем больше будет опыта - тем быстрее ты будешь находить ответы (в геометрической прогрессии, если хочешь)
с июля в джаву, джсоны... не расстраивайся, по факту ты в 7 лет хочешь пойти в 9 класс учиться. это так не работает.
джава это ооп, за месяц всё выучить? не шути так. тебе нужно минимум месяц изучать базовые понятия - типы данных, структуры, массивы, функции т.е. читать литературу "для чайников" (и с минимумом практики)
правильная постановка вопроса - это половина ответа. а если ты не понимаешь предметную область, то неправильные вопросы будут заводить тебя всё глубже в лес. поэтому или много прочитай или найди ментора, а если ты хочешь сразу кодить... ну что ж, удачи
Нажмите, чтобы раскрыть...
Не слишком ли ты загнул с 7 летом и 9 классом? И к тому же не всё же так фундаментально и требует простых знаний в тех или иных местах, сериализатор(в этом случае чтение с gson) как то связан с алгеброй и формулами. Писал бы я всё с нуля то я бы понялд
ke1evra сказал(а):↑не шути так. тебе нужно минимум месяц изучать базовые понятия - типы данных, структуры, массивы, функции т.е. читать литературу "для чайников" (и с минимумом практики)
Нажмите, чтобы раскрыть...зачем, чтобы быть труъ задротом??? и че месяц массивы изучать, методы для работы с ними? зачем вообще что-то читать с минимумом практики, это же для лохов полных, которые гордятся тем что они умеют диффуры второго порядка считать и работают за 40 тыщ прогерами на фортране
Ectx сказал(а):↑Не слишком ли ты загнул с 7 летом и 9 классом? И к тому же не всё же так фундаментально и требует простых знаний в тех или иных местах, сериализатор(в этом случае чтение с gson) как то связан с алгеброй и формулами. Писал бы я всё с нуля то я бы понялд
Нажмите, чтобы раскрыть...если ты с ютуба не можешь спроецировать решение в свою задачу, то нет, вообще ни разу не слишком =)
ты прав, достаточно простых знаний для подобных вещей, но только чтобы эти вещи реализовать. а вот уже чтобы понять, почему так, а не иначе - уже нужны фундаментальные знания.
но, раз ты не можешь даже это реализовать через месяц - то считай, что для тебя это с нуля и тем более нужно читать теорию.
P.S. при чём здесь сериализатор и алгебра с формулами? ты видимо даже не понял, к чему я это написал...
ke1evra сказал(а):↑если ты с ютуба не можешь спроецировать решение в свою задачу, то нет, вообще ни разу не слишком =)
ты прав, достаточно простых знаний для подобных вещей, но только чтобы эти вещи реализовать. а вот уже чтобы понять, почему так, а не иначе - уже нужны фундаментальные знания.
но, раз ты не можешь даже это реализовать через месяц - то считай, что для тебя это с нуля и тем более нужно читать теорию.
P.S. при чём здесь сериализатор и алгебра с формулами? ты видимо даже не понял, к чему я это написал...
Нажмите, чтобы раскрыть...
Так прикольно что ты меня тотал дураком выставляешь. Ты пишешь к делу но совсем не то что нужно
Сразу скажу, я не джавист. Тебе просто надо погуглить как парсить эти json-ы.
Краткий алгоритм: ввод json-a -> парсинг и расчет статистики -> вывод результатов
Я так понял (прочитав статью на хабре), что json это просто контейнер типа map, где есть key и value. И у тебя есть много этих элементов контейнера. Накидал за пару минут код на плюсах. QDateTime - это такой класс для работы с датой и временем. Для объектов этого класса есть метод secsTo, который возвращает разницу двух дат (и времен) и метод setdate(settime), который устанавливает дату (время). Наверное в java есть какой-то аналог - погугли. Также я понятия не имею как реализовать вывод (да и ввод) в файл (из файла) в java, мб в этом языке тоже есть такое понятие как "поток". Расчет 90-процентиля сходу не напишу, надо чуть посидеть над алгоритмом
код на c++ (qt)// предположим что ты как-то считал этот файл в контейнер
QDateTime datatime_departure, datatime_arrival;
double delta, delta1;
QVector v_delta;
for (создаем итератор на первый элемент контейнера, пусть будет it; it != конец контейнера; ++it) {
if (it.key == "departure_date") {
datatime_departure.setdate(it.value);
continue; // переход к следующей итерации в цикле
}
if (it.key == "departure_time") {
datatime_departure.settime(it.value);
continue;
}
if (it.key == "arrival_date") {
datatime_arrival.setdate(it.value);
continue;
}
if (it.key == "arrival_time") {
datatime_arrival.settime(it.value);
}
delta = secsTo(datatime_departure, datatime_arrival); // secsTo returns the number of seconds between two datetimes
v_delta.push_back(delta); // заполнение вектора времени полета
}for (unsigned int i = 0; i < v_delta.size(); ++i) { // перебираем этот вектор
delta1 += v_delta;
}
delta1 /= v_delta.size(); // получили среднее время полета
// создаешь файл и открываешь поток
stream << "Средне время полета: " << delta1;
Tor4illa сказал(а):↑Сразу скажу, я не джавист. Тебе просто надо погуглить как парсить эти json-ы.
Краткий алгоритм: ввод json-a -> парсинг и расчет статистики -> вывод результатов
Я так понял (прочитав статью на хабре), что json это просто контейнер типа map, где есть key и value. И у тебя есть много этих элементов контейнера. Накидал за пару минут код на плюсах. QDateTime - это такой класс для работы с датой и временем. Для объектов этого класса есть метод secsTo, который возвращает разницу двух дат (и времен) и метод setdate(settime), который устанавливает дату (время). Наверное в java есть какой-то аналог - погугли. Также я понятия не имею как реализовать вывод (да и ввод) в файл (из файла) в java, мб в этом языке тоже есть такое понятие как "поток". Расчет 90-процентиля сходу не напишу, надо чуть посидеть над алгоритмом
код на c++ (qt)// предположим что ты как-то считал этот файл в контейнер
QDateTime datatime_departure, datatime_arrival;
double delta, delta1;
QVector v_delta;
for (создаем итератор на первый элемент контейнера, пусть будет it; it != конец контейнера; ++it) {
if (it.key == "departure_date") {
datatime_departure.setdate(it.value);
continue; // переход к следующей итерации в цикле
}
if (it.key == "departure_time") {
datatime_departure.settime(it.value);
continue;
}
if (it.key == "arrival_date") {
datatime_arrival.setdate(it.value);
continue;
}
if (it.key == "arrival_time") {
datatime_arrival.settime(it.value);
}
delta = secsTo(datatime_departure, datatime_arrival); // secsTo returns the number of seconds between two datetimes
v_delta.push_back(delta); // заполнение вектора времени полета
}for (unsigned int i = 0; i < v_delta.size(); ++i) { // перебираем этот вектор
delta1 += v_delta;
}
delta1 /= v_delta.size(); // получили среднее время полета
// создаешь файл и открываешь поток
stream << "Средне время полета: " << delta1;Нажмите, чтобы раскрыть...
Meepka сказал(а):↑Нажмите, чтобы раскрыть...может ты и прав: со свитчем красивее
тот же цикл, но со switchfor (создаем итератор на первый элемент контейнера, пусть будет it; it != конец контейнера; ++it) {
switch (it.key):
case "departure_date": {
datatime_departure.setdate(it.value);break;
}
case "departure_time": {
datatime_departure.settime(it.value);break;
}
case "arrival_date": {
datatime_arrival.setdate(it.value);break;
}
case "arrival_time": {
datatime_arrival.settime(it.value);
delta = secsTo(datatime_departure, datatime_arrival); // secsTo returns the number of seconds between two datetimes
v_delta.push_back(delta); // заполнение вектора времени полетаbreak;
case default:
continue;
}
Спасибо всем кто отозвался. Сегодня задача было решена мной. Был наговнокоден жестко. Задача с процентилем 90 пока не была решена.
А только среднее время перелетов.
https://github.com/Ectx369/anylogicМожете покекать, код можно сделать лаконичнее и посидеть разложить по норм классом собрать Jar и по феншую. Но я так надолбался что скоро всё сделаю как надо или забуду)))
Tor4illa сказал(а):↑что json это просто контейнер типа map, где есть key и value.
Нажмите, чтобы раскрыть...Джсон это JavaScript Object Notation - это обычный объект который записан в виде стринги.
Эту стрингу конечно можно как дурачек парсить руками - но это бред. Есть куча реализаций парсера в виде готовых либ.
Самые популярные Jackson и GSON, лучше юзать 1ю, так она стандарт в самых популярных фреймворках.
Дальше, ему надо описать клас, в который он будет мапить свой джсон, для этого нужно прочитать полностью всю джсонку которая ему летит, и описать каждое поле.
Для этого конечно нужно знать ситаксис джсона, и понимать как там описаны массивы, мапы, объекты, и обычные значения.
После этого дело за малым, взять еще одну либу для работы с файлами, прочитать файл, замапить мапером из стринги в объект в джаве, и уже потом в джаве у тебя будет объект со всеми данными с которыми делаешь что хочешь.
Armagedonby_ZERGS сказал(а):↑Джсон это JavaScript Object Notation - это обычный объект который записан в виде стринги.
Эту стрингу конечно можно как дурачек парсить руками - но это бред. Есть куча реализаций парсера в виде готовых либ.
Самые популярные Jackson и GSON, лучше юзать 1ю, так она стандарт в самых популярных фреймворках.
Дальше, ему надо описать клас, в который он будет мапить свой джсон, для этого нужно прочитать полностью всю джсонку которая ему летит, и описать каждое поле.
Для этого конечно нужно знать ситаксис джсона, и понимать как там описаны массивы, мапы, объекты, и обычные значения.
После этого дело за малым, взять еще одну либу для работы с файлами, прочитать файл, замапить мапером из стринги в объект в джаве, и уже потом в джаве у тебя будет объект со всеми данными с которыми делаешь что хочешь.Нажмите, чтобы раскрыть...А в яве нет простого преобразования жсона в нативные структуры? Ну там, объект в мапу, массив в лист или аррайлист?
DrZoidberg сказал(а):↑А в яве нет простого преобразования жсона в нативные структуры? Ну там, объект в мапу, массив в лист или аррайлист?
Нажмите, чтобы раскрыть...А как он должен быть? Джсон это стандарт жаваскрипта.
В Жсоне есть андефайнед - в джаве его нет.
В Жсоне все цифры это тип Number в джаве целочисленных ссылочных типов - два.
С коллекциями тоже, в джаве их много видов.
Поэтому да, простого нет. Но это на чистой джаве.
Хорошие новости, что фреймворки это делают под капотом на автомате. Тебе нужно только описать дтошку-объект который ты хочешь получить. Фреймворк все сделает за тебя. Но как работает либа под капотом фреймворка и как его настраивать под спец задачи - знать нужно.
Ectx сказал(а):↑Нажмите, чтобы раскрыть...
Совет, которого не просили:
1. пиши тесты, не важно какие они будут, как много они проверяют. Для начала просто протестируй haapy-way и один фиговый путь (любой изъян). Можешь пользоваться плагином покрытия кода у самой IDE.
Как только приучишь себя писать тесты - 80% ошибок будешь ловить еще до деплоя.
2. Обрабатывай исключения, сейчас твой код просто выбрасывает исключения, не логирует никаких данных. Напиши простейший вывод System.err.println("Поломались на процессе вычитать все из файла"). Это поможет разобраться, на каком моменте ты сломался
3. Называй переменные читаемыми именами, чтобы понимать за что оно вообще отвечает, через месяц откроешь свой код - и будешь полчаса разбирать, какая переменная за что отвечает
А в целом - да неплохо для начального уровня.
Стримы поиспользовал, тредсейф переменные поиспользовал.
Тема закрыта
-
ЗаголовокРазделОтветов ПросмотровПоследнее сообщение
-
основной аккаунт 16 Mar 2025 в 02:26Сообщений: 1 16 Mar 2025 в 02:26
Сообщений:1
Просмотров:1
-
основной аккаунт 16 Mar 2025 в 02:18Сообщений: 1 16 Mar 2025 в 02:18
Сообщений:1
Просмотров:0
-
Сообщений:18
Просмотров:24
-
fred oneil 16 Mar 2025 в 01:48Сообщений: 5 16 Mar 2025 в 01:48
Сообщений:5
Просмотров:10
-
основной аккаунт 16 Mar 2025 в 01:37Сообщений: 8 16 Mar 2025 в 01:37
Сообщений:8
Просмотров:18